繁体   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