27

だから私はTask'sでプログラミングする方法を学ぼうとしていて、私は練習をしています:

public static int ReturnFirstResult(Func<int>[] funcs)
{
        Task[] tasks = new Task[funcs.Length];
        for (int i = 0; i < funcs.Length; i++)
        {
            tasks[i] = CreatingTask(funcs[i]);
        }
        return Task<int>.Factory.ContinueWhenAny(tasks, (firstTask) =>
                                                            {
                                                                Console.WriteLine(firstTask.Result);
                                                                return ***????***;
                                                            }).***Result***;
}
private static Task CreatingTask(Func<int> func)
{
        return Task<int>.Factory.StartNew(() => { return func.Invoke(); });
}

実行する Func の配列を指定しています。アイデアは、実行された最初の func の結果を返すことです。問題は、フィールド結果が利用できないことです...

ここで何が欠けていますか?

4

2 に答える 2

50

あなたはメソッドTaskから戻ってきています - あなたは戻る必要があり、次にの代わりに変更する必要があります。CreatingTaskTask<int>tasksTask<int>[]Task[]

基本的に、Taskは結果を生成しないタスクを表しますがTask<T>、 type の結果を生成するタスクを表しますT。あなたの場合、コード全体ですべてが返されるため、どこでもint必要です。Task<int>

于 2012-07-04T17:26:35.537 に答える
5

オブジェクトで使用しようとすると、このエラーが発生.ResultTaskます。これは、 を使用するつもりだった可能性がありますTask<T>。ただし、Task を使用するつもりで、await を使用せずにそれを返したい場合、Task は void に似ており、結果はありません。代わりに使用できます.Wait()。これは void を返します。

于 2019-04-16T15:56:05.217 に答える