有没有办法像最后一样使用任务延续选项



有没有办法像 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(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.

相关内容

  • 没有找到相关文章

最新更新