में क्रियान्वित कर रहे हैं क्यों कोड के इस टुकड़े के बारे में:Async कॉलबैक WPF यूआई धागा
static async Task<string> testc()
{
Console.WriteLine("helo async " + Thread.CurrentThread.ManagedThreadId);
await Task.Run(() => {
Thread.Sleep(1000);
Console.WriteLine("task " + Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("callback "+Thread.CurrentThread.ManagedThreadId);
return "bob";
}
static void Main(string[] args)
{
Console.WriteLine("helo sync " + Thread.CurrentThread.ManagedThreadId);
testc();
Console.WriteLine("over" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.ReadLine();
}
मैं मिल निम्नलिखित उत्पादन:
helo sync 10
helo async 10
over10
task 11
callback **11**
कौन सा ठीक है: इंतजार के बाद कोड का टुकड़ा में निष्पादित किया जाता है कार्य के रूप में एक ही धागा।
अब, अगर मैं एक WPF आवेदन में यह कार्य करें:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Console.WriteLine("helo sync " + Thread.CurrentThread.ManagedThreadId);
testc();
Console.WriteLine("over" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.ReadLine();
}
यह उत्पादन निम्नलिखित उत्पन्न:
helo sync 8
helo async 8
over8
task 9
callback **8**
हम कहाँ कोड देख सकते हैं के बाद यूआई धागा में मार डाला का इंतजार है। खैर, यह बहुत अच्छा है क्योंकि यह अवलोकन संग्रह आदि में हेरफेर करने में सक्षम बनाता है ... लेकिन मैं सोच रहा था "क्यों?" "मैं वही कैसे कर सकता हूं?" क्या यह कुछ कार्यक्षेत्र व्यवहार से संबंधित है? क्या यह .NET Framework में हार्ड-कोड किया गया है?
Thx किसी भी विचार के लिए आप जमा कर सकते हैं।
+1 को आपके बीटीडब्ल्यू पर अधिक जोर देने की आवश्यकता है। इस पूरे उत्तर के लिए – Phill