繁体   English   中英

确保主线程不会在执行所有异步方法之前死亡

[英]Ensuring that the main thread doesn't die before execution of all an asyncronous method

我有一个需要轮询特定服务器以获得我发送给它的作业状态的功能。 它的形式为:

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

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM