非同期メソッドから 2 つの異なるタスクを実行しようとしていますが、2 番目のタスクは最初のタスクが終了した場所からのみ開始する必要があります。ContinueWith を使用しようとしましたが、成功しませんでした。これは私のサンプルコードです:
class Program
{
static List<string> GlobalList1 = null;
static List<string> GlobalList2 = null;
static void Main(string[] args)
{
Task firstTask = new Task(DoFirstThing);
firstTask.Start();
firstTask.Wait();
Task secondTask = firstTask.ContinueWith(o => DoSecondThing(), TaskContinuationOptions.ExecuteSynchronously);
secondTask.Wait();
Console.ReadKey();
}
public async static void DoFirstThing()
{
Console.WriteLine("Doing first...");
Task t = new Task(FirstThing);
t.Start();
await t;
}
public async static void DoSecondThing()
{
Console.WriteLine("Doing second...");
Task t = new Task(SecondThing);
t.Start();
await t;
}
private async static void FirstThing()
{
Console.WriteLine("In First..");
Task t = new Task(() =>
{
List<string> list = new List<string>();
for (int i = 0; i < 1000; i++)
{
list.Add(string.Format("Testing:{0}", i));
}
System.Threading.Thread.Sleep(2000);
GlobalList1 = list;
});
t.Start();
await t;
}
private async static void SecondThing()
{
Console.WriteLine("In Second...");
Task t = new Task(() =>
{
GlobalList2 = new List<string>();
for (int i = 0; i < GlobalList1.Count; i++)
{
GlobalList2.Add(GlobalList1[i].ToString() + " - testing");
}
});
t.Start();
await t;
}
}
コンソール出力から、タスクが同時に実行されていることに気付くかもしれません。この動作を変更することは可能ですか?