在任务取消期间忽略间接抛出的异常是否安全(Observable.Create(async)和Merge()) [英] Is it safe to ignore indirectly thrown exceptions during task cancellation (Observable.Create(async) and Merge())

查看:89
本文介绍了在任务取消期间忽略间接抛出的异常是否安全(Observable.Create(async)和Merge())的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我有两个同时运行的任务,其中一个可以通过异常失败,然后间接触发取消另一个任务。两个任务都被"包裹"。由具有Observable.Create()的IObservables和他们的结果与
Observable.Merge()结合。

I have two simultaneously running tasks of which one can fail with an exception which will then indirectly triggering the cancellation of the other task. Both tasks are "wrapped" by IObservables with Observable.Create() and their results are combined with Observable.Merge().

来源:


Func<IObserver<Unit>, CancellationToken, Task> taskA = 
	async (o, c) =>
	{
		await Task.Delay(100);
		throw new Exception("Fail");
	};

Func<IObserver<Unit>, CancellationToken, Task> taskB =
	async (o, c) =>
	{
		try
		{
			await Task.Delay(2000, c);	// wait fails with exception because task is cancelled
			o.OnCompleted();			// never reached
		}
		catch (Exception ex)
		{
			Console.WriteLine(ex.Message);
			throw;
		}
	};

var whenA = Observable.Create(taskA);
var whenB = Observable.Create(taskB);

try
{
	Observable.Merge(whenA, whenB).Wait();
}
catch (Exception ex)
{
	Console.WriteLine(ex.Message);
}

推荐答案

我刚刚意识到我的问题可能(可能)被改写为很多更简单的一个:

I just realized my question can (probably) be rephrased to a much simpler one:

Observable.Merge()在第一次收到OnError()之后如何处理来自源订阅的OnError()调用?这些例外是否会被忽略并发送给gc-nirvana?

How does Observable.Merge() treat OnError() calls from source subscriptions AFTER it received OnError() for the first time? Will such exceptions be ignored and sent to the gc-nirvana?


这篇关于在任务取消期间忽略间接抛出的异常是否安全(Observable.Create(async)和Merge())的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆