簡體   English   中英

C#ThreadPool等待結果

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM