繁体   English   中英

Task.Run和Func <>

[英]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> ,它也使用方法参数。

您可以使用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!" } } );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM