C#线程池等待结果
本文关键字:结果 等待 线程 | 更新日期: 2023-09-27 18:21:18
我想要一个类似的函数:
public static V callAsyncAndWait<V>(Func<V> func)
{
ThreadPool.QueueUserWorkItem(obj =>
{
V v = func.Invoke();
});
return v;
}
显然,这段代码无法编译。我想要的是在另一个线程中运行Func并返回结果。我该怎么做?
我建议您改用新的.NET 4.0 Task
类。以下是关于如何从执行Task
返回结果的教程:http://msdn.microsoft.com/en-us/library/dd537613.aspx
实际上,您有一个非常方便的属性Result
,在调用getter时,它将被阻塞,直到结果可用。
这没有太大意义。如果该方法应该等待任务完成,那么您根本不需要单独的线程。
类似"调用async并完成后通知"的内容更有意义:
void CallAsyncAndNotifyWhenDone<T>(Func<T> func, Action<T> callback)
{
ThreadPool.QueueUserWorkItem(obj =>
{
T result = func();
callback(result);
});
}
您可以使用异步模式来实现:
public static V callAsyncAndWait<V>(Func<V> func)
{
var asyncResult = func.BeginInvoke(null, null);
asyncresult.AsyncWaitHandle.WaitOne();
return func.EndInvoke(asyncResult);
}