C# 任务类问题
我正在尝试在windows phone 8.1应用程序中实现任务类。在我的应用程序中,任务是了解用户是否已按下后退键、是否已完成任务或是否因网络原因发生故障。为此,我使用task类的continue with()方法。不知道是什么问题。帮帮我 代码:C# 任务类问题,c#,windows-phone-8,task,C#,Windows Phone 8,Task,我正在尝试在windows phone 8.1应用程序中实现任务类。在我的应用程序中,任务是了解用户是否已按下后退键、是否已完成任务或是否因网络原因发生故障。为此,我使用task类的continue with()方法。不知道是什么问题。帮帮我 代码: 我不知道是什么问题,所以需要您的帮助。如果您可以访问异步/等待,请不要使用ContinueWith。就这么简单ContinueWith将允许您执行与新关键字相同的操作,但更难阅读、理解、使用和维护。所以,帮你自己一个忙,除非你真的需要,否则不要使用
我不知道是什么问题,所以需要您的帮助。如果您可以访问
异步/等待,请不要使用ContinueWith
。就这么简单ContinueWith
将允许您执行与新关键字相同的操作,但更难阅读、理解、使用和维护。所以,帮你自己一个忙,除非你真的需要,否则不要使用它
您的代码变为
try
{
result = await GetData(limit, offset);
}
catch(TaskCancelledException)
{
// GetData has been cancelled
// Console.WriteLine("task cancelled");
//throw new Exception("task 2 error");
}
catch(Exception)
{
//GetData has been faulted
//Console.WriteLine("task fault");
//throw new Exception("task 2 error");
}
现在理解你的意思要容易得多
编辑
这里似乎需要进一步澄清。使用wait
关键字基本上与使用ContinueWith
相同。它只允许您以更简洁易读的方式编写复杂的异步逻辑
async Task DoAsyncWork()
{
var a = await GetAAsync();
Frob(a);
}
完全一样
//Notice there is no async keword here
Task DoAsyncWork()
{
return GetAAsync().ContinueWith(t => Frob(t.Result),
TaskContinuationOptions.OnlyOnRanToCompletion);
}
类似地,内部带有wait
的try/catch
块相当于带有ContinueWith
、TaskContinuationOptions
和aggregateeexception
展开的相当复杂的表达式。
如果您添加链接两个或多个任务
,或一些if
的可能性,以及一些良好度量的循环(for
,foreach
或while
,这其实并不重要),那么它会变得更加复杂。如果你坚持你的继续使用枪,你会得到一种理智的人都不愿意写的代码。这没关系,因为编译器的工作就是为您编写它。而且编译器不是一个理智的人。所以只要坚持等待就好了
如果你不能使用async/await
(显然不是你的情况,你是在为WP8编程),哭是可以的,因为你会受到很多潜在的伤害。一些扩展方法会让你的生活变得更轻松,但它仍然不会很美好。我知道,但这是一个需要满足的要求。例如,如果一个人按下后退按钮,网络断开,操作失败。如果出现这种情况,我的应用程序应该根据特定情况做出响应。是的,应用程序应该做出相应的响应。但我看不出这有什么关系。我在响应中编写的代码与原始答案中的代码具有完全相同的语义,并且将通过将控件传递给相应的catch块来对取消或错误作出反应。您不需要继续使用。唯一不同的情况是getData出现故障,出现TaskCancelationException
。。。我觉得这很不对!
//Notice there is no async keword here
Task DoAsyncWork()
{
return GetAAsync().ContinueWith(t => Frob(t.Result),
TaskContinuationOptions.OnlyOnRanToCompletion);
}