考虑以下示例:
        ActionBlock<TimeSpan> ab = new ActionBlock<TimeSpan>(async _ =>
        {
            await Task.Delay(_);
            throw new Exception();
        }, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = Int32.MaxValue });
        ab.Post(TimeSpan.FromSeconds(10d));
        ab.Post(TimeSpan.FromDays(1d));
        await ab.Completion;
Run Code Online (Sandbox Code Playgroud)
不出所料,我在输出窗口中看到10秒后将引发异常,但这不会导致dataFlow完成(等待ab之后的断点。完成将不会在1天前命中)。
就我而言,如果单个计算步骤中有异常,我想取消整个dataFlow。
我看不到如何使用tpl dataflow做到这一点...有什么建议吗?
谢谢...
[edit]如Ofir所述,我可以这样做:
        ActionBlock<TimeSpan> ab = new ActionBlock<TimeSpan>(async _ =>
        {
            try
            {
                await Task.Delay(_);
                throw new Exception();// Or any other Task thay may throw an exception.
            }
            catch(Exception)
            {
                cancelTokenSource.Cancel();
                throw;
            }
        }, new ExecutionDataflowBlockOptions() {CancellationToken=cancelTokenSource.Token, MaxDegreeOfParallelism = Int32.MaxValue });
        ab.Post(TimeSpan.FromSeconds(10d));
        ab.Post(TimeSpan.FromDays(1d));
        await ab.Completion;
Run Code Online (Sandbox Code Playgroud)
但这恰恰是我要避免的事情:一次又一次地键入相同的try {} catch……或更糟糕的是:忘记了...;)
我接下来要做的是写一个替换ActionBlock的构造函数来处理该问题的方法(这将需要一个额外的CancellationTokenSource参数)...我很惊讶这不是直接与数据流一起出现的吗?确实如此吗?
[最终编辑]似乎答案是tpd …
我需要打开我的Xamarin Android应用程序的应用程序设置页面.
使用Java,似乎正确的方法是:
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
              Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
Run Code Online (Sandbox Code Playgroud)
所以,使用C#,我试过:
StartActivity(new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
              Android.Net.Uri.Parse("package:" + BuildConfig.ApplicationId)));
Run Code Online (Sandbox Code Playgroud)
这什么都没做......我试过没有Uri参数,在这种情况下我得到一个例外:
Android.Content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS }
Run Code Online (Sandbox Code Playgroud)
我也试过了
StartActivityForResult(
    new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings), 0);
Run Code Online (Sandbox Code Playgroud)
同样的例外......
任何的想法?
谢谢.