[英]Call async method without await
我致力於Windows Phone 8+應用程序的圖像加載器庫,當然它支持磁盤上的緩存。
因此,我需要異步將圖像保存在磁盤上,而無需等待結果:
// Async saving to the storage cache without await
// ReSharper disable once CSharpWarnings::CS4014
Config.StorageCacheImpl.SaveAsync(imageUrl, downloadResult.ResultStream)
.ContinueWith(
task =>
{
if (task.IsFaulted || !task.Result)
{
Log("[error] failed to save in storage: " + imageUri);
}
}
);
如您所見, SaveAsync()
是一種異步方法,它返回Task<bool>
,如果保存了圖像,則bool
結果為true。
問題是編譯器顯示警告,因為我沒有在等待async方法的結果,但是, 我不需要等待它 ,我需要在調用SaveAsync()
之后,盡快將下載的圖像返回給用戶代碼。 SaveAsync()
我返回下載的圖片。
因此, 我將圖像異步地緩存到IsolatedStorageFile中 ,而且,這無關緊要,是否緩存,因為如果沒有,JetImageLoader將會再次加載它。
是否可以禁用此警告?
PS,如果您想查看JetImageLoader源碼,我可以給您一個指向GitHub的鏈接。
出現編譯器警告是因為這樣做幾乎總是一個錯誤。 一方面,您不會收到有關任務已完成的任何通知,也不會收到有關錯誤的通知。
為了避免編譯器警告,您可以將其分配給未使用的局部變量,如下所示:
var _ = Config.StorageCacheImpl.SaveAsync...
對於您的情況,我還建議您使用輔助方法而不是ContinueWith
來使代碼更簡潔:
private static async Task SaveAsync(string imageUrl, Stream resultStream)
{
bool success = false;
try
{
success = await Config.StorageCacheImpl.SaveAsync(imageUrl, downloadResult.ResultStream);
}
finally
{
if (!success)
Log("[error] failed to save in storage: " + imageUri);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.