Tag: iasyncresult

C#IAsyncResult WaitAll

在WaitAll的一些实现中,我看到了以下代码 IAsyncResult result1 = Method.BeginInvoke(10, MyCallback, null) IAsyncResult result2 = Method.BeginInvoke(20, MyCallback, null) WaitHandle[] waitHandles = new WaitHandle[] { result1.AsyncWaitHandle, result2.AsyncWaitHandle}; WaitHandle.WaitAll(waitHandles) 这看起来是对的吗? 在创建waitHandles数组之前,其中一个调用完成的可能性有多大? 此致,Dhananjay

AsyncWaitHandle.WaitOne阻止CLR线程吗? 或者它是否创建了I / O完成端口?

我有这个问题, AsyncWaitHandle.WaitOne阻止了CLR线程吗? 或者它是否创建了I / O完成端口? 例如,当我运行我的应用程序时,我启动一个初始化某些数据的任务’A’,当新请求到达时,我希望它们等到’A’结束,所以我可以做一个IAsyncResult.AsyncWaitHandle.WaitOne ,但是。 ..它是否阻止调用线程直到’A’结束或者它是否创建了一个I / O完成端口,当’A’完成时也会通知它。 如果没有,有没有办法做到这一点? 问候。

等待IAsyncResult方法等待另一个IAsyncResult(链接)

(只能使用.NET 3.5库存,因此没有任务,没有Reactive Extensions) 我有,我认为是一个简单的案例,但我很困惑。 缺点是,我将BeginGetRequestStream的IAsyncResult返回给BeginMyOperation()的调用者,我想真正发送回BeginGetResponse的IAsyncResult,它在调用EndGetRequestStream时调用。 所以我想知道,我该怎么做 public IAsyncResult BeginMyOperation(…) { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestUri); webRequest.Method = “POST”; // This is the part, that puzzles me. I don’t want to send this IAsyncResult back. return webRequest.BeginGetRequestStream(this.UploadingStreamCallback, state); } // Only want this to be called when the EndGetResponse is ready. public void EndMyOperation(IAsyncResult ar) { } […]

明确地实现IAsyncResult

我一般都对部分实现接口持谨慎态度。 但是, IAsyncResult有点特殊情况,因为它支持几种截然不同的使用模式。 使用/看到使用AsyncState / AsyncCallback模式的AsyncState是AsyncState ,而不是只使用AsyncWaitHandle调用EndInvoke ,或者轮询IsCompleted ( AsyncWaitHandle )? 相关问题: 检测ThreadPool WorkItem是否已完成/等待完成 。 考虑这个类(非常近似,需要锁定): public class Concurrent { private ManualResetEvent _resetEvent; private T _result; public Concurrent(Func f) { ThreadPool.QueueUserWorkItem(_ => { _result = f(); IsCompleted = true; if (_resetEvent != null) _resetEvent.Set(); }); } public WaitHandle WaitHandle { get { if (_resetEvent == […]

BeginXXX中FromAsync的参数太多了?

我有一个带有以下签名的异步方法: IAsyncResult BeginGetMyNumber(string foo, string bar, string bat, int bam, AsyncCallback callback, object state) 我想使用Factory.FromAsync执行它,如下所示: var result = Task.Factory.FromAsync( instance.BeginGetMyNumber, instance.EndGetMyNumber, “foo”, “bar”, “bat”, 100, /*bam*/ null); 但是我收到以下错误: 参数1:无法从’方法组’转换为’System.Func’ 似乎没有合适的重载FromAsync方法http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory.fromasync.aspx ,它只支持最多5个参数(包括回调和状态)在BeginXXX方法上。 除了重构BeginXXX方法以获取对象而不是六个参数之外,有没有办法使用FromAsync执行它?

c#Webrequest Post和GetResponse

我正在编写一个程序,将XML提交到网站。 编写的代码工作正常, 但有时它因某些原因停止工作,抛出System.Net.ProtocolViolationException。 我可以关闭程序并重新运行 – 它再次开始工作就好了。 这是我正在使用的代码: private string Summit(string xml) { string result = string.Empty; StringBuilder sb = new StringBuilder(); try { WebRequest request = WebRequest.Create(this.targetUrl); request.Timeout = 800 * 1000; RequestState requestState = new RequestState(xml); requestState.Request = request; request.ContentType = “text/xml”; // Set the ‘Method’ property to ‘POST’ to post data to a […]