【发布时间】:2017-08-23 08:27:03
【问题描述】:
为了从服务器异步获取数据,我使用getData.BeginInvoke(callback, null),其中getData 是获取数据的方法。 callback 对检索到的数据进行一些工作和通知。
在调用方法中,我读过的好习惯是使用WaitHandle 等待方法完成。我的问题是:WaitHandle 是否也等待回调完成?如果没有,怎么办?
代码:
Func<Data> getData = () =>
{
//...
};
AsyncCallback callback = (IAsyncResult ar) =>
{
//...
};
IAsyncResult result = getData.BeginInvoke(callback, null);
result.AsyncWaitHandle.WaitOne();
注意1:我必须使用framework 3.5,所以我不能使用async & await
注意2:我不认为这个问题与this post 重复。
【问题讨论】:
-
实际上,您希望将异步调用设置为方法中的最后一个调用(如果在获取数据时不能同时执行其他任何操作)并在回调中继续您的流程。当异步方法返回时,回调将被调用。
-
这可能会有所启发:docs.microsoft.com/en-us/dotnet/standard/… 在开始异步操作后立即阻塞通常没有多大意义。你也可以同步调用该函数。
-
这取决于您将等待句柄设置为 true 的位置。查看 msdn 套接字示例:msdn.microsoft.com/en-us/library/bew39x2a(v=vs.100).aspx
标签: c# asynchronous callback