我正在为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。
问题是编译器显示警告因为我没有等待异步方法的结果,但是,我不需要等待它,我需要返回在调用SaveAsync()
之后,尽可能快地将图像下载到用户代码中我返回下载的图像。
所以我正在异步地将图像缓存到IsolatedStorageFile 而且 - 它无关紧要,是否会被缓存,因为如果没有 - JetImageLoader会再次加载它。
是否可以禁用此警告?
P.S。如果你想看JetImageLoader来源,我可以给你一个GitHub的链接。
答案 0 :(得分:8)
编译器警告存在,因为执行此操作几乎总是错误的。首先,您没有得到任何已完成任务的通知,也没有收到错误通知。
要避免编译器警告,您只需将其分配给未使用的局部变量,如下所示:
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);
}
}