個人對C#中async和await的理解
本人以前沒有接觸過c#編程,最近由于畢設需要用到Unity編程,所以開始了解一些,c#中的async和await關鍵字是以前沒有接觸過的,所以查了一些資料,如果想詳細了解用法可以看其他大佬們的博客,他們的博客已經寫的非常詳細了,但是身為一個初學者,我對很多關鍵字都沒有太多了解,在看大佬們的詳解時,他們又會扯出來task、event、Lamdba運算式,delegate 等等,導致我不得不去搜其他關鍵字的用法,總之看了一大圈下來感徑訓是云里霧里的,
本文僅為我所看的一些關鍵字用法的個人總結或者是我在學習程序中覺得疑惑的點,如果想要系統的了解或其他我沒有提到的點,可以去看其他大佬的博客
以及如果哪里有錯誤,歡迎指出~
async
async的出現是為了解決異步執行問題,函式加了async關鍵字就表明該函式是異步的
注:這里的異步是指該函式本身可以與其他陳述句異步執行,但是該函式內部執行仍然是同步的
void Method1()
{
Console.WriteLine("Method1 Start");
}
void Method2()
{
Console.WriteLine("Method2 Start");
}
void Method2()
{
Console.WriteLine("Method3 Start");
}
void Method2()
{
Console.WriteLine("Method4 Start");
}
async void funcA()
{
Method1();
Method2();
}
void funcB()
{
Method3();
Method4();
}
static void Main()
{
funcA();
funcB();
}
main函式中執行funcA()和funcB(),由于funcA函式前面加了async關鍵字,表示該函式是異步執行的,funcA()和funcB()可以異步執行,即在funcA()沒有執行完時就可以開始執行funcB();但是在funcA()內部仍然是同步執行的,即Method1()執行完之后才可以開始執行Method2()
await
await關鍵字表示必須等待該函式執行完之后才可以繼續往下執行,將上面的main函式更改為
static void Main()
{
await funcA();
funcB();
}
其他函式不變,忘記的同學可以往上回翻
funcA加了await關鍵字之后則必須等待funcA()執行完畢之后才可以往下執行funcB()函式
這里可能會有一個疑惑,既然加了之后又變為同步執行了,那為什么不直接把async和await都去掉?
加了async之后表示這個方法是多執行緒的,而如果把async和await都去掉,那么在執行funcA()時就會把主執行緒阻塞掉,而在現實中我們往往并不希望這樣,比如在點一個按鈕之后就不能和界面互動了,這會讓人瘋掉!而加了async和await之后就可以解決主執行緒被阻塞的問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/274794.html
標籤:其他
上一篇:資料庫---基礎知識(1)
