最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#異步方法返回void與Task的區(qū)別詳解

 更新時(shí)間:2021年03月04日 12:03:56   作者:金慶  
這篇文章主要給大家介紹了關(guān)于C#異步方法返回void與Task的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

C#異步方法返回void和Task的區(qū)別

如果異步(async關(guān)鍵字)方法有返回值,返回類型為T時(shí),返回類型必然是 Task<T>。

但是如果沒有返回值,異步方法的返回類型有2種,一個(gè)是返回 Task, 一個(gè)是返回 void:

 public async Task CountDownAsync(int count)
 {
  for (int i = count; i >= 0; i--)
  {
   await Task.Delay(1000); 
  }
 }

 public async void CountDown(int count)
 {
  for (int i = count; i >= 0; i--)
  {
   await Task.Delay(1000);
  }
 }

調(diào)用時(shí),如果返回 Task, 但返回值被忽略時(shí),VS 會(huì)用綠色波浪線警告:

 CountDownAsync(3);
 ~~~~~~~~~~~~~~~~~

信息為:

(awaitable) Task AsyncExample.CountDownAsync(int count)

Usage:
 await CountDownAsync(...);

Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.

中文為:

CS4014:由于此調(diào)用不會(huì)等待,因此在此調(diào)用完成之前將會(huì)繼續(xù)執(zhí)行當(dāng)前方法。請(qǐng)考慮將"await"運(yùn)算符應(yīng)用于調(diào)用結(jié)果。

添加 await 后就正常了:

 await CountDownAsync(3);

如果調(diào)用者不是一個(gè)異步方法,因?yàn)橹挥性诋惒椒椒ㄖ胁趴梢允褂?await,

或者并不想在此等待,如想同時(shí)執(zhí)行多個(gè) CountDownAsync(),

就不能應(yīng)用 await 來消除警告。

此時(shí)可以改用 void 返回值的版本:

void Test()
{
 ...
 CountDown(3);
 CountDown(3);
 ...
}

async void CountDown(int count)
{
 for (int i = count; i >= 0; i--)
 {
  await Task.Delay(1000);
 }
}

Never call async Task methods without also awaiting on the returned Task. If you don't want to wait for the async behaviour to complete, you should call an async void method instead.

摘自:http://www.stevevermeulen.com/index.php/2017/09/using-async-await-in-unity3d-2017/

CountDown() 可以直接調(diào)用 CountDownAsync() 實(shí)現(xiàn):

async void CountDown(int count)
{
 await CountDownAsync(count);
}

使用下劃線變量忽略異步方法的返回值也可以消除警告:

void Test()
{
 ...
 _ = CountDownAsync(3);
 _ = CountDownAsync(3);
 ...
}

但是這樣同時(shí)也會(huì)忽略 CountDownAsync() 中的異常。如以下異常會(huì)被忽略。

void Test()
{
 ...
 _ = CountDownAsync(3);
 ...
}

async Task CountDownAsync(int count)
{
 for (int i = count; i >= 0; i--)
 {
  await Task.Delay(1000); 
 }
 throw new Exception();
}

如果是調(diào)用返回 void 的異步方法,Unity 會(huì)報(bào)錯(cuò):

Exception: Exception of type 'System.Exception' was thrown.

對(duì) Async 后綴的說明

You could say that the Async suffix convention is to communicate to the API user that the method is awaitable. For a method to be awaitable, it must return Task for a void, or Task<T> for a value-returning method, which means only the latter can be suffixed with Async.

摘自:https://stackoverflow.com/questions/15951774

grpc 生成的代碼中,異步請(qǐng)求返回了一個(gè) AsyncCall 對(duì)象,AsyncCall 實(shí)現(xiàn)了 GetAwaiter() 接口:

  public virtual grpc::AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, ...)

可以這樣調(diào)用并等待:

 var resp = await client.GetFeatureAsync(req);

雖然返回類型不是Task<>, 但是可等待,所以添加了 Async 后綴。

總結(jié)

到此這篇關(guān)于C#異步方法返回void與Task區(qū)別的文章就介紹到這了,更多相關(guān)C#異步方法返回區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#有效防止同一賬號(hào)多次登錄(附三種方法)

    C#有效防止同一賬號(hào)多次登錄(附三種方法)

    這篇文章主要介紹了C#有效防止同一賬號(hào)多次登錄的方法,有效防止同一賬號(hào)多次登錄的方法很多,比如用數(shù)據(jù)庫來記錄用戶登錄情況、用Application來保存用戶登錄信息、用Cache來保存信息等,感興趣的小伙伴們可以參考一下
    2015-11-11
  • C#使用iTextSharp設(shè)置PDF所有頁面背景圖功能實(shí)例

    C#使用iTextSharp設(shè)置PDF所有頁面背景圖功能實(shí)例

    這篇文章主要介紹了C#使用iTextSharp設(shè)置PDF所有頁面背景圖功能,實(shí)例分析了C#使用iTextSharp設(shè)置PDF頁面背景圖的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#基礎(chǔ)知識(shí)系列八const和readonly關(guān)鍵字詳細(xì)介紹

    C#基礎(chǔ)知識(shí)系列八const和readonly關(guān)鍵字詳細(xì)介紹

    這篇文章主要介紹了C#中的const和readonly關(guān)鍵字,有需要的朋友可以參考一下
    2014-01-01
  • C#生成本地配置文件的實(shí)現(xiàn)示例

    C#生成本地配置文件的實(shí)現(xiàn)示例

    本文將介紹如何使用C#語言生成本地配置文件,以便為應(yīng)用程序提供靈活的配置選項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • C#實(shí)現(xiàn)高效查找替換Excel表格數(shù)據(jù)或文本

    C#實(shí)現(xiàn)高效查找替換Excel表格數(shù)據(jù)或文本

    在現(xiàn)代數(shù)據(jù)驅(qū)動(dòng)的業(yè)務(wù)環(huán)境中,Excel表格扮演著不可或缺的角色,本文將深入探討如何利用C#編程語言,精準(zhǔn)地實(shí)現(xiàn)Excel表格中的數(shù)據(jù)和文本查找與替換,感興趣的小伙伴可以了解下
    2025-09-09
  • C#生成Word文檔代碼示例

    C#生成Word文檔代碼示例

    這篇文章主要介紹了C#生成Word文檔代碼示例,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-06-06
  • 詳解C# parallel中并行計(jì)算的四種寫法總結(jié)

    詳解C# parallel中并行計(jì)算的四種寫法總結(jié)

    在C#中,parallel關(guān)鍵字可以用于并行計(jì)算。本文為大家總結(jié)了四種C# parallel并行計(jì)算的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • Unity游戲之存儲(chǔ)數(shù)據(jù)

    Unity游戲之存儲(chǔ)數(shù)據(jù)

    這篇文章主要介紹了Unity游戲之存儲(chǔ)數(shù)據(jù),感興趣的同學(xué),可以拷貝代碼,試驗(yàn)一下
    2021-04-04
  • C#圖片加載慢的具體原因和解決方法

    C#圖片加載慢的具體原因和解決方法

    這篇文章主要討論了在C#中優(yōu)化圖片加載的三個(gè)關(guān)鍵點(diǎn):使用異步加載、正確使用圖片類和對(duì)圖片進(jìn)行適當(dāng)?shù)膲嚎s和緩存,通過避免這些致命錯(cuò)誤,可以顯著提高應(yīng)用程序的性能和用戶體驗(yàn),需要的朋友可以參考下
    2025-11-11
  • 詳解c#索引(Index)和范圍(Range)

    詳解c#索引(Index)和范圍(Range)

    這篇文章主要介紹了c#索引(Index)和范圍(Range)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論

南靖县| 洛阳市| 雅江县| 阿图什市| 英吉沙县| 轮台县| 阳新县| 保山市| 安西县| 张北县| 巴里| 祁连县| 伊宁县| 边坝县| 宁远县| 德兴市| 辽阳县| 新疆| 墨玉县| 大邑县| 淮南市| 西乌珠穆沁旗| 彰化市| 琼结县| 安义县| 清苑县| 雅安市| 静安区| 金塔县| 金门县| 板桥市| 怀集县| 卢氏县| 克山县| 蒲江县| 安徽省| 西安市| 高清| 射洪县| 普兰店市| 安龙县|