this question के बाद कॉलबैक को परिभाषित करने के लिए, मैं टीपीएल का उपयोग करके एसिंक विधि को लागू करने और टीएपी दिशानिर्देशों का पालन करने की कोशिश कर रहा हूं।टास्क आधारित एसिंक्रोनस विधि
मैं अपने एसिंक विधि को समाप्त होने पर कॉलबैक करने के लिए चाहता हूं। जहां तक मैं देख सकता हूं कि तीन तरीके हैं जो मैं कर सकता हूं।
1) कॉलबैक हस्तचालित रूप से अपने कार्य प्रतिनिधि
public Task DoWorkAsync(DoWorkCompletedCallback completedCallback)
{
return Task.Factory.StartNew(
{
//do work
//call callback manually
completedCallback();
});
}
2) कॉलबैक निरुपित कार्य प्रतिनिधि
public Task DoWorkAsync(DoWorkCompletedCallback completedCallback)
{
return Task.Factory.StartNew(
{
//do work
}
).ContinueWith(completedCallback); //assign callback to Task
}
3 में कार्य करने) कॉलबैक निरुपित फोन करने वाले
public Task DoWorkAsync()
{
return Task.Factory.StartNew(
{
//do work
});
}
public void SomeClientCode()
{
Task doingWork = DoWorkAsync();
doingWork.ContinueWith(OnWorkCompleted);
}
में कार्य करने में मेरा आंत महसूस करना है कि 3 अधिक सही है, क्योंकि यह विधि से कॉलबैक को रद्द करता है, और इसका मतलब क्लाइंट है कोड किसी भी तरह फिट (कॉलबैक, मतदान आदि का उपयोग करके) को प्रबंधित कर सकता है, जो कि कार्य के बारे में क्या लगता है। हालांकि, क्या होता है यदि क्लाइंट कोड कॉलबैक को हुक करने से पहले DoWorkAsync() अपना काम पूरा करता है?
क्या ऐसा करने के लिए एक आम तौर पर स्वीकार्य तरीका है या यह सब नया है?
क्या 2 का कोई फायदा है) 1)?
धन्यवाद, यह समझ में आता है। 3 के साथ जाएगा। लेकिन क्या होता है यदि कार्य जारी रखने से पहले कार्य पूरा हो जाता है? क्या यह अभी भी बुलाया जाता है? मैं दस्तावेज़ों को थोड़ा अस्पष्ट खोज रहा हूं। – GazTheDestroyer
हां, इसे बुलाया जाता है। – dtb
मेरे पास उदाहरण के लिए एक प्रश्न है 3. यदि कुछ क्लाइंटकोड() यूई थ्रेड (डब्ल्यूपीएफ) पर चल रहा है, तो ऑनवर्क्स भी यूई थ्रेड पर होगा? या एक ही थ्रेड जो एसिंक काम करता है? –