确保主线程不会;t在执行所有异步方法之前死亡
本文关键字:异步方法 执行 线程 确保 | 更新日期: 2023-09-27 18:25:01
我有一个功能,需要轮询某个服务器以获取我发送的作业的状态。它的形式为:
public Foo PollForJobOutcomeAsync(int pollSpan, Action<Foo> callback)
{
var caller = new AsyncMethodCaller((p, cb) =>
{
PollForJobOutcome(p);
cb(this);
});
caller.BeginInvoke(pollSpan, callback, null, null);
return this;
}
public void PollForJobOutcome(int pollSpan)
{
while (job not completed)
{
DoSomething();//send request to server, change job status according to response
Thread.Sleep(pollSpan);
}
}
不幸的是,如果调用PollJobOutcomeAsync
方法的主线程在该方法完成执行之前终止,我将无法获得所需的状态更新。如何确保这些函数在主线程失效之前完成执行。
您可以在此处使用WaitHandle
。
IAsyncResult result = caller.BeginInvoke(pollSpan, callback, null, null);
BeginInvoke
将返回IAsyncResult
,通过返回值将其传递给主线程,或者以某种方式从主线程调用
result.AsyncWaitHandle.WaitOne();//main thread waits here till Async Operation completes
希望这能帮助