次のコードがある場合
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static Task<int> GetSuperLargeNumber()
{
var main = Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
return 100;
});
var second = main.ContinueWith(x => Console.WriteLine("Second: " + x.Result), TaskContinuationOptions.AttachedToParent);
var third = main.ContinueWith(x => Console.WriteLine("Third: " + x.Result), TaskContinuationOptions.AttachedToParent);
return main.ContinueWith(x =>
{
Task.WaitAll(second, third);
return x.Result;
});
}
static void Main(string[] args)
{
GetSuperLargeNumber().ContinueWith(x => Console.WriteLine("Complete"));
Console.ReadKey();
}
}
}
mainを最初に開始し、次に2つの依存関係を開始し、その後に1番目と2番目の依存関係を並行して開始できます。次に、呼び出し元が継続を追加するための値を含むfutureを返します。ただし、2番目と3番目が最初に実行されていることを確認したいと思います。以下のコードはこれを達成するための最良の方法ですか?ちょっと不格好そうです