c# – 等待多个回调
发布时间:2020-12-15 04:27:35 所属栏目:百科 来源:网络整理
导读:我正在使用一个执行异步调用的库,当返回响应时,将调用带有结果的回调方法.这是一个简单的模式,但我现在遇到了障碍.如何对异步方法进行多次调用并等待(不阻塞)它们?当我从所有服务获得数据时,我想调用我自己的回调方法,该方法将获得异步方法返回的两个(或更
我正在使用一个执行异步调用的库,当返回响应时,将调用带有结果的回调方法.这是一个简单的模式,但我现在遇到了障碍.如何对异步方法进行多次调用并等待(不阻塞)它们?当我从所有服务获得数据时,我想调用我自己的回调方法,该方法将获得异步方法返回的两个(或更多)值.
这里遵循的正确模式是什么?顺便说一句,我不能改变库使用TPL或其他东西……我必须忍受它. public static void GetDataAsync(Action<int,int> callback) { Service.Instance.GetData(r1 => { Debug.Assert(r1.Success); }); Service.Instance.GetData2(r2 => { Debug.Assert(r2.Success); }); // How do I call the action "callback" without blocking when the two methods have finished to execute? // callback(r1.Data,r2.Data); } 解决方法
你想要的是像
CountdownEvent.试试这个(假设你在.NET 4.0上):
public static void GetDataAsync(Action<int,int> callback) { // Two here because we are going to wait for 2 events- adjust accordingly var latch = new CountdownEvent(2); Object r1Data,r2Data; Service.Instance.GetData(r1 => { Debug.Assert(r1.Success); r1Data = r1.Data; latch.Signal(); }); Service.Instance.GetData2(r2 => { Debug.Assert(r2.Success); r2Data = r2.Data; latch.Signal(); }); // How do I call the action "callback" without blocking when the two methods have finished to execute? // callback(r1.Data,r2.Data); ThreadPool.QueueUserWorkItem(() => { // This will execute on a threadpool thread,so the // original caller is not blocked while the other async's run latch.Wait(); callback(r1Data,r2Data); // Do whatever here- the async's have now completed. }); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |