C# 使用Task.ContinueWith时,并非所有代码路径都返回值
因此,我有一个函数,其中在allC# 使用Task.ContinueWith时,并非所有代码路径都返回值,c#,.net,windows-runtime,windows-phone-8.1,task,C#,.net,Windows Runtime,Windows Phone 8.1,Task,因此,我有一个函数,其中在allif else中有一个返回值,但仍然得到编译错误: 并非所有代码路径都返回值 public异步任务DeletePost(字符串更新\u id,字符串身份验证) { if(实用程序.NetworkStatus.HasInternetAccess) { 等待api.DeletePost.DeletePostAPI(更新id,authId).ContinueWith((t)=> { if(t.Status==TaskStatus.RanToCompletion) { 如
if else
中有一个返回值,但仍然得到编译错误:
并非所有代码路径都返回值
public异步任务DeletePost(字符串更新\u id,字符串身份验证)
{
if(实用程序.NetworkStatus.HasInternetAccess)
{
等待api.DeletePost.DeletePostAPI(更新id,authId).ContinueWith((t)=>
{
if(t.Status==TaskStatus.RanToCompletion)
{
如果(t.Result!=null)
{
返回t.Result.status==200;
}
其他的
{
返回false;
//结果为空,API失败
//未实施
}
}
其他的
{
返回false;
//任务失败
//未实施
}
});
}
其他的
{
返回false;
//无网络
//未实施
}
}
谁能告诉我我做错了什么吗?您需要返回wait的返回值。因此:
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;
对。您不会返回继续执行
deletepastapi
的结果:
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
}
}
public异步任务DeletePost(字符串更新\u id,字符串身份验证)
{
if(实用程序.NetworkStatus.HasInternetAccess)
{
return wait api.DeletePost.DeletePostAPI(update\u id,authId).ContinueWith((t)=>
{
if(t.Status==TaskStatus.RanToCompletion)
{
如果(t.Result!=null)
{
返回t.Result.status==200;
}
其他的
{
返回false;
//结果为空,API失败
//未实施
}
}
其他的
{
返回false;
//任务失败
//未实施
}
});
}
其他的
{
返回false;
//无网络
//未实施
}
}
如果您完全删除并继续执行,只需使用更现代的wait
,您的代码就会简单得多:
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
}
}
public异步任务DeletePost(字符串更新\u id,字符串身份验证)
{
if(实用程序.NetworkStatus.HasInternetAccess)
{
尝试
{
var result=await api.DeletePost.DeletePostAPI(更新id,authId);
如果(结果!=null)
{
返回result.status==200;
}
其他的
{
返回false;
//结果为空,API失败
//未实施
}
}
抓住
{
返回false;
//任务失败
//未实施
}
}
其他的
{
返回false;
//无网络
//未实施
}
}
return wait api.DeletePost.DeletePostAPI
和return false
在方法末尾,那么这个新的返回何时执行?考虑到我的工作流程function@Rishabh876在DeletePostAPI
完成后,它的延续完成,您从延续中返回的值将从DeletePost
返回,哦,该死,现在我得到了它。我真是太傻了。谢谢
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
}
}