[英]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.