15

如何运行返回值并接受参数的任务?我看到有一个重载的方法Task.Run<TResult>(Func<TResult>),但是我如何在那里传递参数?

4

2 回答 2

29

Func<TResult>不带参数。通常,您会改为使用 lambda 表达式来捕获参数。例如:

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

text是一个捕获的变量......所以即使你只是创建一个Func<int>,它也使用方法参数。

于 2012-10-29T19:26:47.117 回答
7

您可以使用 Task.Factory.StartNew() 重载传入一个“状态”对象,该对象包含您想要使用的所有参数。这是一个传入 NameValueCollection 的非常基本的示例,但您显然可以传入任何类型的对象。

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!" } } );
于 2012-10-29T19:49:22.187 回答