加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:27:45 所属栏目:百科 来源:网络整理
导读:我有一个方法 public TaskTask DoSomeWorkOnARemoteMachine() 这非常描述性地通过以下方式在远程机器上执行一些工作: 在消息总线上排队消息,表明应该完成工作 远程代理程序接收该消息并执行该工作 工作完成,代理人在消息总线上排队消息,说完成了工作 调用该
我有一个方法
public Task<Task> DoSomeWorkOnARemoteMachine()

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

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

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

要调用这个方法我使用:

await await DoSomeWorkOnARemoteMachine();

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

await DoSomeWorkOnARemoteMachine();

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

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

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读