金慶的專欄
C++博客
::
首頁(yè)
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評(píng)論 :: 0 Trackbacks
公告
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網(wǎng)游開發(fā)(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊(cè)
公告照片
搜索
積分與排名
積分 - 653816
排名 - 25
最新評(píng)論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫(kù)
asio 成為C++首選網(wǎng)絡(luò)庫(kù)
--linda
2.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫(kù)給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯(cuò)誤(11016)
2.?SVN中邪惡的replace(10937)
3.?VS2005編譯libevent(10404)
4.?混音算法的學(xué)習(xí)與研究(10183)
5.?C調(diào)用lua腳本的效率測(cè)試(9002)
評(píng)論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯(cuò)誤(18)
4.?C++引用優(yōu)于指針(17)
5.?ACE與ASIO之間關(guān)于Socket編程的比較(16)
C#異步方法返回void和Task的區(qū)別
# C#異步方法返回void和Task的區(qū)別
(金慶的專欄 2021.2)
如果異步(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 后綴。
posted on 2021-02-25 10:38
金慶
閱讀(1092)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
9. 其它
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
TortoiseGit is OK but GitExtensions fails
DeathVoteExpirationTimeout in Orleans
How to delete local branches of GitExtension
Clustering provider in Orleans
Why Orleans' actor is virutal
What comes after microservice?
Rust Deref coercion example
Rust Error Return Check Policy
Rust visibility
Why does Rust check borrow even in single thread
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
伊人久久成人成综合网222
|
久久久久久久综合狠狠综合
|
色欲综合久久躁天天躁蜜桃
|
亚洲中文字幕无码一久久区
|
国产欧美一区二区久久
|
日韩久久久久中文字幕人妻
|
77777亚洲午夜久久多人
|
国产精品久久久久无码av
|
狠狠色丁香久久婷婷综合蜜芽五月
|
久久亚洲日韩看片无码
|
久久精品国产免费一区
|
国产成人精品综合久久久久
|
久久久久久久久久免免费精品
|
亚洲精品国精品久久99热一
|
久久久精品久久久久久
|
久久精品成人免费网站
|
亚洲国产另类久久久精品
|
亚州日韩精品专区久久久
|
伊人久久大香线蕉精品
|
精品无码久久久久久午夜
|
亚洲精品高清国产一线久久
|
亚洲精品97久久中文字幕无码
|
亚洲国产天堂久久综合网站
|
久久久久女人精品毛片
|
日产精品久久久一区二区
|
中文字幕精品久久
|
久久久久亚洲AV成人网人人软件
|
国产精品一区二区久久不卡
|
欧美一区二区久久精品
|
伊人丁香狠狠色综合久久
|
精品一区二区久久久久久久网站
|
欧美熟妇另类久久久久久不卡
|
久久婷婷五月综合成人D啪
|
综合久久一区二区三区
|
色婷婷综合久久久久中文字幕
|
品成人欧美大片久久国产欧美
|
大美女久久久久久j久久
|
99热成人精品免费久久
|
久久亚洲高清综合
|
少妇无套内谢久久久久
|
色欲久久久天天天综合网精品
|