Mar*_*tin 6 c# multithreading asynchronous windows-phone-7
我正在使用一个执行异步调用的库,当返回响应时,将调用带有结果的回调方法.这是一个简单的模式,但我现在遇到了障碍.如何对异步方法进行多次调用并等待(不阻塞)它们?当我从所有服务获得数据时,我想调用我自己的回调方法,该方法将获得异步方法返回的两个(或更多)值.
这里遵循的正确模式是什么?顺便说一句,我不能改变库使用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);
}
Run Code Online (Sandbox Code Playgroud)
你想要的是像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.
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2023 次 |
| 最近记录: |