有没有办法像 finally 一样使用 TaskContinuationOptions
Is there a way to use TaskContinuationOptions like a finally
有没有办法像 finally 一样使用 TaskContinuationOptions?
这是我的代码
ShowLoading();
Task.Factory.StartNew((Action)(() =>
{
_broker.SetDrugDataFromAPI(newDrug);
})).ContinueWith(x =>
{
lock (this)
{
//Do Something to UI
}
}, _uiScheduler).ContinueWith(x =>
{
//Do Somehting after change UI
}).ContinueWith(x =>
{
HideLoading();
}, TaskContinuationOptions.OnlyOnFaulted);
这是我的问题
我想像最后一样使用最后一个 ContinueWith。
所以,我像这样更改了我的最后一个 ContinueWith 短语
}).ContinueWith(x =>
{
HideLoading();
}, TaskContinuationOptions.OnlyOnRanToCompletion |
TaskContinuationOptions.OnlyOnFaulted);
我以为是最后一个任务完成或出错时使用。
但是它抛出一个错误。
希望有好的方法可以解决我的问题
感谢您阅读我的问题。
如果您不指定 TaskContinuationOptions
,那么它将在所有状态下 运行 - 无论 Task
出现故障(异常)、取消还是成功完成。
例如:
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
using (var cts = new CancellationTokenSource())
{
var task = Task.CompletedTask
.ContinueWith(t => Console.WriteLine("Run after completed"))
.ContinueWith(t => throw new Exception("Blow up"))
.ContinueWith(t => Console.WriteLine("Run after exception"))
.ContinueWith(t => cts.Cancel())
.ContinueWith(t => Console.WriteLine("This will never be hit because we have been cancelled"), cts.Token)
.ContinueWith(t => Console.WriteLine("Run after cancelled."));
await task;
}
}
}
此程序产生以下输出:
Run after completed
Run after exception
Run after cancelled.
有没有办法像 finally 一样使用 TaskContinuationOptions?
这是我的代码
ShowLoading();
Task.Factory.StartNew((Action)(() =>
{
_broker.SetDrugDataFromAPI(newDrug);
})).ContinueWith(x =>
{
lock (this)
{
//Do Something to UI
}
}, _uiScheduler).ContinueWith(x =>
{
//Do Somehting after change UI
}).ContinueWith(x =>
{
HideLoading();
}, TaskContinuationOptions.OnlyOnFaulted);
这是我的问题
我想像最后一样使用最后一个 ContinueWith。 所以,我像这样更改了我的最后一个 ContinueWith 短语
}).ContinueWith(x =>
{
HideLoading();
}, TaskContinuationOptions.OnlyOnRanToCompletion |
TaskContinuationOptions.OnlyOnFaulted);
我以为是最后一个任务完成或出错时使用。
但是它抛出一个错误。
希望有好的方法可以解决我的问题
感谢您阅读我的问题。
如果您不指定 TaskContinuationOptions
,那么它将在所有状态下 运行 - 无论 Task
出现故障(异常)、取消还是成功完成。
例如:
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
using (var cts = new CancellationTokenSource())
{
var task = Task.CompletedTask
.ContinueWith(t => Console.WriteLine("Run after completed"))
.ContinueWith(t => throw new Exception("Blow up"))
.ContinueWith(t => Console.WriteLine("Run after exception"))
.ContinueWith(t => cts.Cancel())
.ContinueWith(t => Console.WriteLine("This will never be hit because we have been cancelled"), cts.Token)
.ContinueWith(t => Console.WriteLine("Run after cancelled."));
await task;
}
}
}
此程序产生以下输出:
Run after completed
Run after exception
Run after cancelled.