2013-07-26 33 views
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方法終止方法完成執行前,我不會得到理想的狀態更新。如何確保這些功能在主線程死亡之前完成執行。

+0

請問你的主線程終止? Winform或控制檯應用程序? –

+0

@SriramSakthivel控制檯應用程序。但它有所作爲嗎? – Likhit

+0

只是我需要知道你的主線程終止如此問題,爲什麼你不能讓主線程等待AsyncJob完成? –

回答

1

您可以在這裏使用WaitHandle

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

BeginInvoke將返回IAsyncResult的返回值傳遞給你的主線程或以某種方式再從你的主線程調用

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

希望這有助於

相關問題