15

値を返し、パラメーターを受け取るタスクを実行するにはどうすればよいですか?オーバーロードされたメソッドTask.Run<TResult>(Func<TResult>)があることがわかりますが、そこにパラメーターを渡すにはどうすればよいですか?

4

2 に答える 2

29

Func<TResult>パラメータを取りません。通常、代わりにラムダ式を使用してパラメーターをキャプチャします。例えば:

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 に答える