[英]Is reassigning a task value necessary when not using task.ContinueWith()
[英]Not all code paths return a value when using Task.ContinueWith
所以我有這個函數,在所有if-else
都有一個返回值,但仍然出現Compilation錯誤:
並非所有代碼路徑都返回值
public async Task<bool> DeletePost(string update_id, string authId)
{
if (Utility.NetworkStatus.HasInternetAccess)
{
await APIs.DeletePost.DeletePostAPI(update_id, authId).ContinueWith((t) =>
{
if (t.Status == TaskStatus.RanToCompletion)
{
if (t.Result != null)
{
return t.Result.status == 200;
}
else
{
return false;
//empty result, API failed
//not implemented
}
}
else
{
return false;
//task failed
//not implemented
}
});
}
else
{
return false;
//no network
//not implemented
}
}
誰能告訴我我在做什么錯?
是。 您不返回DeletePostAPI
的延續結果:
public async Task<bool> DeletePost(string update_id, string authId)
{
if (Utility.NetworkStatus.HasInternetAccess)
{
return await APIs.DeletePost.DeletePostAPI(update_id, authId).ContinueWith((t) =>
{
if (t.Status == TaskStatus.RanToCompletion)
{
if (t.Result != null)
{
return t.Result.status == 200;
}
else
{
return false;
//empty result, API failed
//not implemented
}
}
else
{
return false;
//task failed
//not implemented
}
});
}
else
{
return false;
//no network
//not implemented
}
}
如果完全刪除ContinueWith
而使用更現代的await
則代碼將變得更加簡單:
public async Task<bool> DeletePost(string update_id, string authId)
{
if (Utility.NetworkStatus.HasInternetAccess)
{
try
{
var result = await APIs.DeletePost.DeletePostAPI(update_id, authId);
if (result != null)
{
return result.status == 200;
}
else
{
return false;
//empty result, API failed
//not implemented
}
}
catch
{
return false;
//task failed
//not implemented
}
}
else
{
return false;
//no network
//not implemented
}
}
您需要返回等待的返回值。 所以:
bool result = await APIs.DeletePost.DeletePostAPI(update_id, authId).ContinueWith((t) =>
{
if (t.Status == TaskStatus.RanToCompletion)
{
if (t.Result != null)
{
return t.Result.status == 200;
}
else
{
return false;
//empty result, API failed
//not implemented
}
}
else
{
return false;
//task failed
//not implemented
}
});
return result;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.