我有一個Silverlight網站正在調用WCF服務,以便它可以做一些服務器端加載。 WCF調用是異步的,因爲它的Silverlight就緒,所以在完成時,我正在讀取CompletedEventArgs
中的數據以加載該類。但是,我不確定範圍如何工作。新任務的範圍與data
相同嗎?它似乎沒有設置爲true
。我知道該服務正在工作,因爲異步調用正在發生,但是我無法調試完成事件觸發,因爲我無法將調試器附加到「ASP.net-hosted-Silverlight」(有沒有辦法獲得圍繞這個?我很想能夠在其.aspx託管的情況下調試Silverlight ...)。我想出了這個this link.我目前正在測試我的項目,但我仍然好奇這個範圍的工作原理。範圍界定如何爲Task.Factory.Startnew工作?
感謝您的幫助!
編輯:我意識到這可能是結構此功能的可怕的方式,我彌補其他建議:)
// Objects constructor calls async WCF task, upon completion of which (grammar?)
// sets IsComplete to true
Foo data = new Foo(param);
Task waitForComplete = Task.Factory.StartNew(() =>
{
while (!data.IsComplete)
{
// Wait 1 second, then poll again
System.Threading.Thread.Sleep(1000 * 1);
}
});
Task.WaitAll(new Task[] { waitForComplete });
// Now that the task has completed, we can access its data
bar.AddRange(data.GetFoo());
你可以只調用'Wait'的任務,或者只是對旋最初的線程。它不清楚在這裏使用「Task」爲你做什麼。 –
-.-你說得很好。它對我來說絕對沒有任何影響:)這是週一的其中一個......我將只有'while'循環 – Adam
@ADam但我認爲問題在於你阻止了主線程,這可能會阻止完成並設置IsComplete的Foo任務... –