c# – 有没有办法知道一个任务是否在等待着?

前端之家收集整理的这篇文章主要介绍了c# – 有没有办法知道一个任务是否在等待着?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个方法
public Task<Task> DoSomeWorkOnARemoteMachine()

这非常描述性地通过以下方式在远程机器上执行一些工作:

>在消息总线上排队消息,表明应该完成工作
>远程代理程序接收该消息并执行该工作
>工作完成,代理人在消息总线上排队消息,说完成了工作
>调用该工作的应用程序会接收到完成工作的消息

我使用任务<任务>是因为第一个任务是用于排队消息;而内部任务在远程机器上的工作已经完成(即当已经接收到代理的消息时)完成.远程代理在执行工作期间捕获的任何异常都将与完成消息一起传递,并在内部任务完成时重新抛出.

调用这个方法我使用:

await await DoSomeWorkOnARemoteMachine();

这将等待消息排队执行该作业,以及完成该作业并接收任何异常.但是,如果我对远程代理的作业是否完成不感兴趣,我可以这样称之为:

await DoSomeWorkOnARemoteMachine();

这不会等待内部任务.然而,内部任务(从远程代理接收消息并重新抛出异常)仍然会在某些时候执行.我觉得这是一个浪费,我想避免执行它,当我不等待的结果.

我的问题是:一个任务是否可以“知道”是否被等待,如果不是,或者执行一些其他的代码路径(如一个空的任务主体),是否可以执行.

我意识到有可以实现的替代方法,比如通过一个“火和忘记”的标志,或添加一个超负荷的“火和忘记”.这将是伟大的,虽然如果我可以实现这个没有客户端API改变

涉及执行这种远程工作执行的其他项目的答案也将是非常好的!

解决方法

我想你这样做的方式很混乱.根本不清楚任务<任务>应该是意思我会做的是让你的方法返回像任务<工作>.然后,工作类型将具有GetResultAsync()方法,它将返回表示远程机器上工作执行的任务.

这样,您的代码具有更清晰的意义,您还可以根据GetResultAsync()是否被调用,轻松识别是否处理响应.

原文链接:https://www.f2er.com/csharp/95515.html

猜你在找的C#相关文章