C# 任务类问题

C# 任务类问题,c#,windows-phone-8,task,C#,Windows Phone 8,Task,我正在尝试在windows phone 8.1应用程序中实现任务类。在我的应用程序中,任务是了解用户是否已按下后退键、是否已完成任务或是否因网络原因发生故障。为此,我使用task类的continue with()方法。不知道是什么问题。帮帮我 代码: 我不知道是什么问题,所以需要您的帮助。如果您可以访问异步/等待,请不要使用ContinueWith。就这么简单ContinueWith将允许您执行与新关键字相同的操作,但更难阅读、理解、使用和维护。所以,帮你自己一个忙,除非你真的需要,否则不要使用

我正在尝试在windows phone 8.1应用程序中实现任务类。在我的应用程序中,任务是了解用户是否已按下后退键、是否已完成任务或是否因网络原因发生故障。为此,我使用task类的continue with()方法。不知道是什么问题。帮帮我

代码:


我不知道是什么问题,所以需要您的帮助。

如果您可以访问
异步
/
等待
,请不要使用
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);
}