小编Syl*_*ain的帖子

如何在第一次异常时取消整个tpl dataFlow?

考虑以下示例:

        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 …

c# dataflow task-parallel-library

3
推荐指数
1
解决办法
915
查看次数

我想从Xamarin Android应用打开应用设置页面

我需要打开我的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)

同样的例外......

任何的想法?

谢谢.

android android-activity xamarin

2
推荐指数
2
解决办法
3198
查看次数