3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
我開(kāi)始學(xué)習(xí)C#5.0中的異步/等待,但我一點(diǎn)也不了解。我不明白如何將其用于并行性。我嘗試了以下非?;镜某绦颍?/p>
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");
? ? ? ? }
? ? }
}
該程序只是阻止調(diào)用,Task.WaitAll()并且永遠(yuǎn)不會(huì)結(jié)束,但是我不明白為什么。我敢肯定,我只是缺少一些簡(jiǎn)單的東西,或者只是沒(méi)有正確的思維模式。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
您的任務(wù)永遠(yuǎn)不會(huì)完成,因?yàn)樗鼈冇肋h(yuǎn)不會(huì)開(kāi)始運(yùn)行。
我將Task.Factory.StartNew創(chuàng)建一個(gè)任務(wù)并啟動(dòng)它。
public static async Task Task1()
{
await Task.Factory.StartNew(() => Thread.Sleep(TimeSpan.FromSeconds(5)));
Debug.WriteLine("Finished Task1");
}
public static async Task Task2()
{
await Task.Factory.StartNew(() => Thread.Sleep(TimeSpan.FromSeconds(10)));
Debug.WriteLine("Finished Task2");
}
附帶說(shuō)明一下,如果您實(shí)際上只是想在異步方法中暫停,則無(wú)需阻塞整個(gè)線程,只需使用 Task.Delay
public static async Task Task1()
{
await Task.Delay(TimeSpan.FromSeconds(5));
Debug.WriteLine("Finished Task1");
}
public static async Task Task2()
{
await Task.Delay(TimeSpan.FromSeconds(10));
Debug.WriteLine("Finished Task2");
}
- 3 回答
- 0 關(guān)注
- 660 瀏覽
添加回答
舉報(bào)