Task.Run and Func<>



如何运行返回值并获取参数的任务?我看到有一个超载的方法Task.Run<TResult>(Func<TResult>),但是如何通过那里的参数?

Func<TResult>不使用参数。通常,您将使用lambda表达式捕获参数。例如:

public void DoSomething(string text)
{
    Task<int> task = Task.Run(() => text.Length);
    ...
}

这里的 text捕获的变量 ...因此,即使您只是创建Func<int>,它也是使用 the方法参数。

您可以使用task.factory.startnew()过载以传递到包含您想要使用的所有参数的"状态"对象中。这是通过名称valuecollection中传递的一个非常基本的示例,但是显然您可以通过任何想要的对象。

Task<bool>.Factory.StartNew(
    ( a ) => {
        NameValueCollection nvc = a as NameValueCollection;
        if( nvc != null ) {
            nvc.AllKeys.ForEach( k => Console.WriteLine( nvc[k] ) );
        }
        return true;
    },
    new NameValueCollection() { { "param1", "hithere!" } } );

最新更新