मैं एक एसिंक्रोनस सेवा लागू कर रहा हूं। माइक्रोसॉफ्ट के example का मूल्यांकन करने के बाद, मैं सोच रहा हूं कि उनका दृष्टिकोण वास्तव में असीमित है या नहीं। मुझे पूरा यकीन है कि यह है, लेकिन कुछ नमूने मैंने ऑनलाइन देखा है और AsyncCallback
पैरामीटर मुझे आश्चर्यचकित करता है।सचमुच एसिंक्रोनस डब्ल्यूसीएफ सेवा
public IAsyncResult BeginGetAcmeAnvil(AsyncCallback callback, object state)
{
// Starts synchronous task
var acmeAsyncResult = new AcmeAsyncResult<Anvil>
{
Data = new Anvil()
};
return acmeAsyncResult;
}
public Anvil EndGetAcmeAnvil(IAsyncResult result)
{
var acmeAsyncResult = result as AcmeAsyncResult<Anvil>;
return acmeAsyncResult != null
? acmeAsyncResult.Data
: new Anvil();
}
सुंदर सरल है, लेकिन कारण है कि हम एक AsyncCallback
पैरामीटर की क्या ज़रूरत है:
उदाहरण के अनुसार, हम लागू करने के लिए शुरू और इस तरह समाप्ति विधि जोड़ी की जरूरत है? क्या हमें callback
पर कॉल नहीं करना चाहिए जो बदले में अंत विधि को ट्रिगर करेगा?
यह मेरे मन में है:
public delegate void AsyncMethodCaller(AcmeAsyncResult<Anvil> acmeAsyncResult,
AsyncCallback callback);
public IAsyncResult BeginGetAcmeAnvil(AsyncCallback callback, object state)
{
var acmeAsyncResult = new AcmeAsyncResult<Anvil>();
var asyncMethodCaller = new AsyncMethodCaller(GetAnvilAsync);
// Starts asynchronous task
asyncMethodCaller.BeginInvoke(acmeAsyncResult, callback, null, null);
return acmeAsyncResult;
}
private void GetAcmeAnvilAsync(AcmeAsyncResult<Anvil> acmeAsyncResult,
AsyncCallback callback)
{
acmeAsyncResult.Data = new Anvil();
callback(acmeAsyncResult); // Triggers EndGetAcmeAnvil
}
public Anvil EndGetAcmeAnvil(IAsyncResult result)
{
var acmeAsyncResult = result as AcmeAsyncResult<Anvil>;
return acmeAsyncResult != null
? acmeAsyncResult.Data
: new Anvil();
}
मैं loadUI का उपयोग कर कुछ भार परीक्षण किया था, लेकिन कोई स्पष्ट प्रदर्शन में परिवर्तन नहीं थी।