एक वेब पेज पर, मैं एक तीसरी पार्टी को बुला रहा हूं जो मुझे समय-समय पर प्रोग्रामआउट सेट करने की अनुमति नहीं देता है। मैं BeginInvoke को कॉल करता हूं और निर्दिष्ट समय की प्रतीक्षा करने के लिए AsyncWaitHandle.WaitOne का उपयोग करता हूं।क्या मुझे टाइमआउट के बाद एंडइवोक को कॉल करने की आवश्यकता है?
यदि कॉल का समय समाप्त हो गया है, तो मैं आगे बढ़ने वाले थ्रेड कॉल के बारे में सोचता हूं और भूल जाता हूं। मेरा सवाल है, क्या मुझे अभी भी टाइमआउट स्थिति में किसी भी तरह EndInvoke को कॉल करना है? इस एमएसडीएन पेज पर "सावधानी" टिप्पणी मुझे आश्चर्यचकित करती है कि मुझे: http://msdn.microsoft.com/en-us/library/2e08f6yc(VS.71).aspx
यदि आपको विश्वास है कि मुझे चाहिए, तो अगला प्रश्न यह है कि यदि मेरा वेब पेज संसाधित हो गया है और तीसरे पक्ष के वापस आने से पहले ग्राहक को वापस आना है , कॉलबैक विधि भी कोड चलाने के लिए सुन रहे होंगे? मेरे अनुरोध/प्रतिक्रिया के बाद सर्वर सक्रियता की तलाश नहीं कर रहा है?
public class RemotePaymentProcessor
{
private delegate string SendProcessPaymentDelegate(string creditCardNumber);
private string SendProcessPayment(string creditCardNumber)
{
string response = string.Empty;
// call web service
SlowResponseService.SlowResponseService srs = new WebServiceTimeout.SlowResponseService.SlowResponseService();
response = srs.GetSlowResponse(creditCardNumber);
return response;
}
public string ProcessPayment(string creditCardNumber, int timeoutMilliseconds)
{
string response = string.Empty;
SendProcessPaymentDelegate sppd = new SendProcessPaymentDelegate(SendProcessPayment);
IAsyncResult ar = sppd.BeginInvoke(creditCardNumber, null, new object());
if (!ar.AsyncWaitHandle.WaitOne(timeoutMilliseconds, false))
{
// Async call did not return before timeout
response = "TIMEOUT";
}
else
{
// Async call has returned - get response
response = sppd.EndInvoke(ar);
}
return response;
}
}
का अनुरोध-प्रतिक्रिया के संबंध में के लिए धन्यवाद में पाए जाने वाले कुछ को जोड़ती है: अगर मैं एक कॉलबैक विधि गुजरती हैं, लेकिन मतलब समय में मेरी buttonclick समारोह को पूरा करने और ग्राहक के लिए लौटने के लिए, वहाँ है कोई भी सुन रहा है जब BeginInvoke धागा देता है? एक स्थानीय ऐप में, यदि मेन() ने ऐप बंद कर दिया और बंद कर दिया, तो कॉलबैक कभी नहीं निकाल दिया गया। – Chad