我有一个方法
public Task<Task> DoSomeWorkOnARemoteMachine()
这非常描述性地通过以下方式在远程机器上执行一些工作:
>在消息总线上排队消息,表明应该完成工作
>远程代理程序接收该消息并执行该工作
>工作完成,代理人在消息总线上排队消息,说完成了工作
>调用该工作的应用程序会接收到完成工作的消息
我使用任务<任务>是因为第一个任务是用于排队消息;而内部任务在远程机器上的工作已经完成(即当已经接收到代理的消息时)完成.远程代理在执行工作期间捕获的任何异常都将与完成消息一起传递,并在内部任务完成时重新抛出.
await await DoSomeWorkOnARemoteMachine();
这将等待消息排队执行该作业,以及完成该作业并接收任何异常.但是,如果我对远程代理的作业是否完成不感兴趣,我可以这样称之为:
await DoSomeWorkOnARemoteMachine();
这不会等待内部任务.然而,内部任务(从远程代理接收消息并重新抛出异常)仍然会在某些时候执行.我觉得这是一个浪费,我想避免执行它,当我不等待的结果.
我的问题是:一个任务是否可以“知道”是否被等待,如果不是,或者执行一些其他的代码路径(如一个空的任务主体),是否可以执行.
我意识到有可以实现的替代方法,比如通过一个“火和忘记”的标志,或添加一个超负荷的“火和忘记”.这将是伟大的,虽然如果我可以实现这个没有客户端API改变
涉及执行这种远程工作执行的其他项目的答案也将是非常好的!