我有一個控制檯應用程序,它執行類方法(在不同的項目中)。 該方法異步執行POST到web服務(這是一個3分鐘的漫長操作),並具有返回受POST影響的記錄數的回調。與此同時,程序繼續執行其他需要不到3分鐘的時間,程序在回調返回前退出。控制檯應用程序在執行回調之前退出
在過去,我使用了下面描述的ManualResetEvent來防止完成,但在這種情況下,我的方法位於不同的類庫中,我希望儘可能保持乾淨。
static ManualResetEvent resetEvent = new ManualResetEvent(false)
static void Main()
{
CallAsyncMethod();
// Do other things...
resetEvent.WaitOne(); // Blocks until "set"
}
void AsyncMethodCallback()
{
// Do processing on completion...
resetEvent.Set(); // Allow the program to exit
}
我會感謝任何幫助提出一個乾淨的模式來實現這一點,而不會污染被調用的類與執行標誌。
@Jon Skeet:確保[ContinueWith](http://msdn.microsoft.com/zh-cn/library/dd270696.aspx)被執行?我的意思是,如果調用線程將會死亡(在這種情況下是主線程),它是否會等待,因爲還有一個「Task <>」必須在完成時執行一個東西? – Tigran 2012-04-17 20:08:19
@Tigran:在什麼意義上?應用程序關閉之前?如果沒有任何前臺線程IIRC,則不需要。但在這裏你不需要ContinueWith - 只需等待任務完成即可。 – 2012-04-17 20:10:32
@Tigran:現在你已經編輯了評論:)不,如果Main方法返回並且沒有其他前景線程,我不希望繼續觸發。但是阻止主要方法返回很容易 - 請參閱我的編輯。 – 2012-04-17 20:11:32