[英]Async / Await method - No need to wait for method execution
您知道這是一次“即發即忘”操作,您無需等待它返回。 但是編譯器並不知道你知道。 就其而言,您將返回一個任務(意味着您要監視任務進度)但不實際使用它。 這不是錯誤 ,但它可能是一個錯誤,所以它會警告你。 就這樣。
如果你想避免警告,你可以做任何事情 - 幾乎任何事情 - 與滿足編譯器擔心任務被放棄的任務。 我寫了一個很小的擴展方法就是這樣做的:
public static void Release(this Task task)
{
}
然后你可以使用iPushNotifications.SendPushNotifications(..).Release()
和編譯器會很高興。
另一個不太明確但代碼較少的替代方案是:
`iPushNotifications.SendPushNotifications(..).ContinueWith(_=>{ /* Do nothing */ });
注意:比沉默編譯器警告更重要的是它會使您的代碼明確地表明您正在做什么。 查看代碼的另一位開發人員不必猜測您是否打算等待執行完成。
如果您可以使用C#7功能,請將其指定為“discard”變量:
_ = iPushNotificationService.SendPushNotification(objNotificationMessage);
如果你不能使用C#7 - 你可以將它分配給一些變量:
var t = iPushNotificationService.SendPushNotification(objNotificationMessage);
或者像這樣使用擴展方法:
public static class TaskExtensions {
public static void Ignore(this Task t) {
}
}
接着:
iPushNotificationService.SendPushNotification(objNotificationMessage).Ignore();
請注意,您可能對結果不感興趣,但如果它無法發送該通知您可能會感興趣,至少記錄該通知。 在這種情況下,您可以使用ContinueWith
:
SendNotification().ContinueWith(c =>
{
// do something with c.Exception
}, TaskContinuationOptions.OnlyOnFaulted).Ignore();
或者將其移到單獨的異步方法:
static async void SendNotification() { // if you hate async void - use Task
try {
await iPushNotificationService.SendPushNotification(objNotificationMessage);
}
catch (Exception ex {
// log it
}
}
然后打電話給它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.