问题标签 [iasyncresult]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
520 浏览

c# - IAsyncResult 的 WaitHandle 和阻塞?

假设我有这个代码:

现在,如果MyAsynchOperation是一个 IO 操作,所以它可能有内部方法(APM),BeginFOO/EndFOO 其中没有绑定线程。

当操作完成时,来自线程池的一个新的/相同的线程(通过完成端口)正在处理响应。

一切都好。

让我想知道的一件事是它IAsyncResult有这个属性:

System.Threading.WaitHandle AsyncWaitHandle { get; }

我熟悉WaitHadnle它有一种方法来阻止当前线程。
一个线程通过调用(例如)在旋转栅门处等待或阻塞。WaitOne

所以这是我的问题:

问题 #1

  • 假设MyAsynchOperation APM 用于 IO,如果没有阻塞/绑定线程,如何使用(用于什么) ?waitHAndle

问题2

  • 假设MyAsynchOperation 使用 APM,它只是我的内部调用的实现new Thread().start(do some calculation),我稍后会调用AsyncCallback's Callback----waithandle这里会阻塞线程吗?
0 投票
1 回答
892 浏览

c# - 如何在 asp.net 中使用 IHttpAsyncHandler 向客户端发送多个确认

我已经在我的班级中实现了 IHttpAsyncHandler 以在后台执行 5-6 个长时间运行的进程,并在每个任务开始时向客户端确认。

早些时候我使用一个会话变量并使用当前任务状态更新它,并以 5 秒的间隔从 jquery 向服务器发出异步调用请求以获取当前状态,但这种实现并不好,因为它不断地向服务器发出请求以获取状态.

然后我在我的应用程序中实现了 IHttpAsyncHandler,现在服务器本身向客户端发送确认,但根据我的实现,我只能发送一个确认!如果我尝试发送多个,则其给出错误为“对象引用未设置为对象的实例”

请检查我的示例代码。

在我的代码中,ExecuteFirst() 方法可以正常向客户端发送确认,但 ExecuteSecond() 不会发送确认其给出错误。

我看了很多,但没有找到正确的方式向客户发送多个确认。

这是我的示例代码,如果有人有任何想法,请帮助我。

Javascript

StartLongRunningProcess.ashx.cs

AsyncRequestResult.cs

0 投票
1 回答
98 浏览

c# - 服务总线 IAsyncResult

我目前正试图让我的应用程序能够从我的服务总线接收异步消息。但是,有时会抛出异常,我不知道如何使它消失或从它的来源中消失。

这是一个例外:

所以,我知道它来自我的 IASync 方法,但我无法理解它在哪里无法正常工作。

我的 QueueClient 配置:

这是我的两个 IASync 方法:

基本上这些方法是每次他在 ServiceBus 中检测到新消息时触发。问题是,我放了一个 Console.WriteLine("New Message"); 当检测到新消息时,此 CW 被触发 2 次(或更多)。

所以两件事之一:什么会导致我的错误?我怎样才能让我的 IAsync 方法只在此消息上触发一次。

0 投票
1 回答
210 浏览

c# - APM 和断点上未解决的 System.AccessViolationException 之谜

考虑以下函数:

问题 1: 如果我在 BeginRead 行设置断点,并在调试模式下运行程序,我会收到以下错误:

MyApp.exe 中发生了“System.AccessViolationException”类型的未处理异常。

但是,如果我将断点放在 ReadLine 行并执行相同操作,则不会发生错误。我相信将 FileStream 实例作为最后一个参数传递给 BeginRead 函数会导致问题,但是,我不知道那里发生了什么。

---UPDATE1:您可能会问我为什么要尝试将“fs”传递给回调。是的,我可以将它作为成员变量保存,但是如果我要异步读取多个文件怎么办?这样,保存文件流的数组(或列表)将是不合理的。

问题2: AFAIK,IAsyncResult 定义如下:

但是,在跟踪代码时,我注意到 IAsyncResult 上的其他成员:

在此处输入图像描述

这怎么可能?IAsyncResult 显然是由 ReadWriteTask 类(在这种情况下)实现的,但是,我不知道其他属性的来源。

---更新2: 我尝试使用以下代码来模仿:

为了调用该方法,我只需实例化一个 MyClass 并调用 GetMyInterface 方法,如下所示:

但是,当我在 Quickwatch 中观看 my 变量时,我看到了非扁平化结果,这对我来说完全没问题。但是,IAsyncResult / ReadWriteTask 的情况不同。有什么不同?

在此处输入图像描述

0 投票
1 回答
515 浏览

powershell - 异步程序问题

我正在尝试使我的 SQL 命令与 PowerShell 异步运行。为了实现这一点,我正在使用SqlCommand类和BeginExecuteNonQuery方法。据我所知,这个方法应该返回IAsyncResult类。但是当我试图检查返回值时,我看到了System.Data.Common.DbAsyncResult类。

请告诉我我做错了什么或者我在哪里可以读到我的错误,我对编程很陌生。我的代码示例如下

这个脚本的结果是

0 投票
2 回答
257 浏览

c# - 发送 DataGrid (DataGridRowDetailsEventArgs e) AsyncResult

再会。有一个DataGrid (operationGrid) RowDetailsTemplate,其中包含DataGrid (sumOperationGrid)

该请求是针对 WCF 服务的,结果证明一切都很好 如果您通过委托提交数据,那么答案就在数据网格 (sumOperationGrid) 中并显示出来。

试过了。

所以

在这两种情况下,都归结为错误“调用线程无法访问此对象,因为此对象的所有者是另一个线程。”

如何从 client.BeginGetCurrencySumByCurrentitem 中删除委托并在单独的函数中转发数据表 s2 的问题?如何回到您的流程并将数据加载到表 sumOperationGrid 中?

0 投票
1 回答
240 浏览

c# - 存储过程未完成,但 IAsyncResult.IsCompleted 为“真”

我有一个我认为最终用户运行存储过程的简单程序,它可能需要相当长的时间才能运行。我想我可以使用异步连接,调用 Begin/EndExecuteNonQuery,并有一个计时器让用户知道它仍在运行。到目前为止,一切都很好。

如果某个参数为真,则被调用的存储过程将在最后执行另一个存储过程。看起来,当这个辅助调用发生时,IsCompleted 变为“真”,即使它不是,然后程序在 EndExecuteNonQuery 上阻塞,直到第二个 SP 完成。虽然我不确定,但我想这是因为直接的 SQL 进程完成了(因为它没有什么可做的,EXEC 调用是最后一行)但是一个子进程使调用继续进行。

如何判断 SP 是否完全完成?我知道我没有完全理解IAsyncResult.IsCompleted;我的印象是,true当通话完全完成时,它就变成了,但该链接中的以下声明让我不这么认为:

当此属性为真时,您可以假定丢弃您分配给异步操作使用的任何资源是安全的。

所以它可能按预期工作,因为我可以安全地丢弃资源,即使完整的 SP 实际上并没有完成。如果是这种情况,是否有其他方法可以知道何时完成?我考虑过只ExecuteNonQuery在另一个线程中使用法线(BackgroundWorker?),但我想确保我没有首先丢失BeginXxx/的东西EndXxx

我也愿意放弃 SqlCommand 这样程序就可以退出而无需等待 SP,因为第一个 SP 对最终用户来说是唯一真正重要的事情。

使用 .Net 4、MSSQL 2008 R2。


相关代码:

0 投票
1 回答
52 浏览

.net - 在另一个 APM 操作中包装一个 APM 操作

我正在使用一些执行异步 I/O 的 APM 方法来实现一个库。(为了解决这个问题,我不能使用 Tasks、async/await、Rx、第三方库等)

假设我的 APM 库方法之一BeginOuter()只是推迟到另一个 APM 方法BeginInner()来执行其异步 I/O。如果我对用户输入所做的一切都是同步的,我是否有任何理由不能将内部IAsyncResultfrom重用BeginInner()为外部IAsyncResultfrom ?BeginOuter()如:

显然,如果BeginOuter()将多个异步调用链接在一起来完成它的工作,那么只将调用者交给第一个等待的调用是错误的。但是如果只有一个异步调用呢?

BeginInner()此外,在我的情况下,我无法想到调用者在完成之后但在调用之前会搞砸EndOuter()——他们将依赖于结果EndOuter()来做任何有用的事情。

只是很难整合所有关于这方面的信息。我已经看到了 IAsyncResult 模式的几个实现,但除了以下内容之外,我找不到关于这个特定用例的太多信息:http: //mtaulty.com/communityserver/blogs/mike_taultys_blog/archive/2005/02/21/5279 .aspx希望能更好地理解其中的微妙之处。

编辑:我确实看到了这个问题,但我检查时的回答都是“使用[库]”、“以不同的方式做”或“实施 IAsyncResult”(但没有说明原因)。我试图了解这是否可以接受,或者实施 IAsyncResult 是否是城里唯一的游戏。

0 投票
2 回答
5746 浏览

c# - 等待 IAsyncResult 函数直到完成

我需要创建等待 IAsycnResult 方法直到完成的机制。我怎样才能做到这一点?

0 投票
2 回答
999 浏览

asynchronous - 如何使用 IAsyncResult

我有一个属于一个类的具有以下签名的方法。

我试图弄清楚我究竟是如何调用回调的。我在任何地方都找不到要提供回调方法的事件。