3

パラメータを受け取り、値を返すタスクをC#で起動しようとしていますが、構文が正しくないようです。

これが私が得たものと同じくらい近いです:これはintを返すことが期待されるタスクです。私は私のラムダです。また、単一のパラメーターを使用して表示しています。o:

Task<int> task1 = Task.Factory.StartNew<int>((o) => { return 2 ; }, 3);
Console.WriteLine(task1.Result);  // prints 2

上記の行は機能します(ハードコードされた値2を返しますが、パラメーターoで何も実行されていないため、役に立たないことがわかります。パラメーターoで何かを実行すると、次のようになります。

Task<int> task1 = Task.Factory.StartNew<int>((o) => { return (2 * o) ; }, 3);

Delegate'System.Func'が1つの引数を取らないという構文メッセージが表示されます。

タスクから両方のこと(パラメーターを渡し、値を取得する)を達成する方法に関するヘルプは素晴らしいでしょう!

4

3 に答える 3

3

oはオブジェクトの状態であり、あなたの場合は、渡す値、または3です。これをにキャストできますint

Task<int> task = Task.Factory.StartNew<int>(o => {
    return 2 * (int)o;
}, 3);

Console.WriteLine(task.Result); // prints 6

TaskFactoryに関するmsdnのドキュメントを参照してください。StartNewは、次のように述べています。

タイプ:System.Object

関数デリゲートによって使用されるデータを含むオブジェクト。

于 2012-06-06T18:54:32.690 に答える
3

a の入力 ( state ) パラメーターTaskは type のみであるobjectため、実際にはタイプ セーフではありません。

on のジェネリック型パラメーターTask<T>は、の戻り値の型ですTask

最良のオプションは、クロージャーを使用することです。

int i = 3;
Task<int> task1 = Task.Factory.StartNew( () => 2 * i );
于 2012-06-06T18:50:59.280 に答える
0

使用Task<t>できるものがあります(こちらをご覧ください)もちろん、Tは戻り値です。パラメーターの時点で、匿名デリゲート内で ur 変数を使用できます。そのためint o、タスクの外部で定義されている場合は、タスクの匿名デリゲート スコープ内でのみ使用できます。ここでサンプルを見ることができます

于 2012-06-06T18:46:17.570 に答える