Sicher, dass Du da synchron drauf warten willst/musst?
Denn genau das tust Du, wenn Du mit Wait() arbeitest.
Asynchron wartest Du, wenn Du das await-Schlüsselwort nutzt.
Dadurch wird die Methode, in der das steht, auch asynchron (braucht also das async in der Definition) und Du kannst darauf wieder starten.
Hier ein MSDN-Artikel dazu:
Asynchronous Programming with async and await
Am Ende teilst Du dem Nutzer dann mit, dass es jetzt fertig ist.
So hast Du den Vorteil, dass die UI nicht blockiert, während die Tasks laufen.
Wenn ich X Tasks habe, auf die ich in ungeordneter Reihenfolge warten muss, dann lege ich die alle in eine Liste.
Danach kann ich dann mit
Task.WhenAll oder (oder
Task.WhenAny) auf alle diese Tasks gleichzeitig warten.
C#-Quelltext
1: 2: 3: 4:
| var tasks = Enumerable.Range(0, 3) .Select(i => Task.Factory.StartNew(() => r.IGrab2.G2Wait(camera[i])));
await Task.WhenAll(tasks); |