![](/img/trans.png)
[英]Use ThreadPool in C# within a loop and wait for all threads to finish
[英]C# ThreadPool wait on result
我想要具有类似功能的功能:
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/zh-cn/library/dd537613.aspx
实际上,您有一个非常方便的属性称为Result
,在调用getter时,它将阻塞直到结果可用为止。
那没有太大意义。 如果该方法应该等待任务完成,则根本不需要单独的线程。
诸如“调用异步并在完成时通知 ”之类的东西更有意义:
void CallAsyncAndNotifyWhenDone<T>(Func<T> func, Action<T> callback)
{
ThreadPool.QueueUserWorkItem(obj =>
{
T result = func();
callback(result);
});
}
您可以使用异步patternt来做到这一点:
public static V callAsyncAndWait<V>(Func<V> func)
{
var asyncResult = func.BeginInvoke(null, null);
asyncresult.AsyncWaitHandle.WaitOne();
return func.EndInvoke(asyncResult);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.