Ich fange an, in C # 5.0 etwas über Async / Warten zu lernen, und ich verstehe es überhaupt nicht. Ich verstehe nicht, wie es für Parallelität verwendet werden kann. Ich habe das folgende sehr grundlegende Programm ausprobiert:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Task task1 = Task1();
Task task2 = Task2();
Task.WaitAll(task1, task2);
Debug.WriteLine("Finished main method");
}
public static async Task Task1()
{
await new Task(() => Thread.Sleep(TimeSpan.FromSeconds(5)));
Debug.WriteLine("Finished Task1");
}
public static async Task Task2()
{
await new Task(() => Thread.Sleep(TimeSpan.FromSeconds(10)));
Debug.WriteLine("Finished Task2");
}
}
}
Dieses Programm blockiert nur den Aufruf von Task.WaitAll()
und wird nie beendet, aber ich verstehe nicht warum. Ich bin sicher, ich vermisse nur etwas Einfaches oder habe einfach nicht das richtige mentale Modell dafür, und keiner der Blogs oder MSDN-Artikel, die es gibt, hilft.
await new Task....
Verwenden Sie stattdessenawait Task.Delay(...);