1

送信したジョブのステータスを取得するために特定のサーバーをポーリングする必要がある機能があります。形式は次のとおりです。

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メソッドの実行が終了する前にメソッドを呼び出すメイン スレッドが終了すると、目的のステータス更新が得られません。メインスレッドが終了する前にこれらの関数の実行を確実に終了するにはどうすればよいですか?

4

1 に答える 1

1

ここを利用できWaitHandleます。

IAsyncResult result = caller.BeginInvoke(pollSpan, callback, null, null);

BeginInvokeこれを戻りIAsyncResult値でメインスレッドに渡すか、何らかの方法でメインスレッド呼び出しから返します

result.AsyncWaitHandle.WaitOne();//main thread waits here till Async Operation completes

お役に立てれば

于 2013-07-26T17:48:08.937 に答える