问题标签 [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.
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
这里会阻塞线程吗?
c# - 如何在 asp.net 中使用 IHttpAsyncHandler 向客户端发送多个确认
我已经在我的班级中实现了 IHttpAsyncHandler 以在后台执行 5-6 个长时间运行的进程,并在每个任务开始时向客户端确认。
早些时候我使用一个会话变量并使用当前任务状态更新它,并以 5 秒的间隔从 jquery 向服务器发出异步调用请求以获取当前状态,但这种实现并不好,因为它不断地向服务器发出请求以获取状态.
然后我在我的应用程序中实现了 IHttpAsyncHandler,现在服务器本身向客户端发送确认,但根据我的实现,我只能发送一个确认!如果我尝试发送多个,则其给出错误为“对象引用未设置为对象的实例”
请检查我的示例代码。
在我的代码中,ExecuteFirst() 方法可以正常向客户端发送确认,但 ExecuteSecond() 不会发送确认其给出错误。
我看了很多,但没有找到正确的方式向客户发送多个确认。
这是我的示例代码,如果有人有任何想法,请帮助我。
Javascript
StartLongRunningProcess.ashx.cs
AsyncRequestResult.cs
c# - 服务总线 IAsyncResult
我目前正试图让我的应用程序能够从我的服务总线接收异步消息。但是,有时会抛出异常,我不知道如何使它消失或从它的来源中消失。
这是一个例外:
所以,我知道它来自我的 IASync 方法,但我无法理解它在哪里无法正常工作。
我的 QueueClient 配置:
这是我的两个 IASync 方法:
基本上这些方法是每次他在 ServiceBus 中检测到新消息时触发。问题是,我放了一个 Console.WriteLine("New Message"); 当检测到新消息时,此 CW 被触发 2 次(或更多)。
所以两件事之一:什么会导致我的错误?我怎样才能让我的 IAsync 方法只在此消息上触发一次。
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 的情况不同。有什么不同?
powershell - 异步程序问题
我正在尝试使我的 SQL 命令与 PowerShell 异步运行。为了实现这一点,我正在使用SqlCommand
类和BeginExecuteNonQuery
方法。据我所知,这个方法应该返回IAsyncResult
类。但是当我试图检查返回值时,我看到了System.Data.Common.DbAsyncResult
类。
请告诉我我做错了什么或者我在哪里可以读到我的错误,我对编程很陌生。我的代码示例如下
这个脚本的结果是
c# - 发送 DataGrid (DataGridRowDetailsEventArgs e) AsyncResult
再会。有一个DataGrid (operationGrid) RowDetailsTemplate,其中包含DataGrid (sumOperationGrid)
该请求是针对 WCF 服务的,结果证明一切都很好 如果您通过委托提交数据,那么答案就在数据网格 (sumOperationGrid) 中并显示出来。
试过了。
所以
在这两种情况下,都归结为错误“调用线程无法访问此对象,因为此对象的所有者是另一个线程。”
如何从 client.BeginGetCurrencySumByCurrentitem 中删除委托并在单独的函数中转发数据表 s2 的问题?如何回到您的流程并将数据加载到表 sumOperationGrid 中?
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。
相关代码:
.net - 在另一个 APM 操作中包装一个 APM 操作
我正在使用一些执行异步 I/O 的 APM 方法来实现一个库。(为了解决这个问题,我不能使用 Tasks、async/await、Rx、第三方库等)
假设我的 APM 库方法之一BeginOuter()
只是推迟到另一个 APM 方法BeginInner()
来执行其异步 I/O。如果我对用户输入所做的一切都是同步的,我是否有任何理由不能将内部IAsyncResult
from重用BeginInner()
为外部IAsyncResult
from ?BeginOuter()
如:
显然,如果BeginOuter()
将多个异步调用链接在一起来完成它的工作,那么只将调用者交给第一个等待的调用是错误的。但是如果只有一个异步调用呢?
BeginInner()
此外,在我的情况下,我无法想到调用者在完成之后但在调用之前会搞砸EndOuter()
——他们将依赖于结果EndOuter()
来做任何有用的事情。
只是很难整合所有关于这方面的信息。我已经看到了 IAsyncResult 模式的几个实现,但除了以下内容之外,我找不到关于这个特定用例的太多信息:http: //mtaulty.com/communityserver/blogs/mike_taultys_blog/archive/2005/02/21/5279 .aspx希望能更好地理解其中的微妙之处。
编辑:我确实看到了这个问题,但我检查时的回答都是“使用[库]”、“以不同的方式做”或“实施 IAsyncResult”(但没有说明原因)。我试图了解这是否可以接受,或者实施 IAsyncResult 是否是城里唯一的游戏。
c# - 等待 IAsyncResult 函数直到完成
我需要创建等待 IAsycnResult 方法直到完成的机制。我怎样才能做到这一点?
asynchronous - 如何使用 IAsyncResult
我有一个属于一个类的具有以下签名的方法。
我试图弄清楚我究竟是如何调用回调的。我在任何地方都找不到要提供回调方法的事件。