2010-12-02 17 views
5

मैं TAP Whitepaper के माध्यम से पढ़ रहा हूँ, और यह नमूना पृष्ठ 22 पर एक टाइमआउट को लागू करने के लिए दिया जाता से उलझन में हूँ:Async CTP - टास्क टाइमआउट सवाल

"जो एक छवि डाउनलोड करने और अक्षम करना चाहता है एक यूआई आवेदन पर विचार करें यूआई डाउनलोड करते समय यूआई। अगर डाउनलोड बहुत लंबा लगता है, हालांकि, यूआई को फिर से सक्षम किया जाना चाहिए और डाउनलोड को त्याग दिया जाना चाहिए। "

Bitmap bmp = await download.TimeoutAfter(3000); 

तर्क में इस बिंदु पर TimeoutAfter की बात क्या है:

public async void btnDownload_Click(object sender, EventArgs e) 
{ 
    btnDownload.Enabled = false; 
    try 
    { 
     Task<Bitmap> download = GetBitmapAsync(url); 
     if (download == await Task.WhenAny(download, Task.Delay(3000))) 
     { 
      Bitmap bmp = await download.TimeoutAfter(3000); 
      pictureBox.Image = bmp; 
      status.Text = “Downloaded”; 
     } 
     else 
     { 
      pictureBox.Image = null; 
      status.Text = “Timed out”; 
      download.ContinueWith(t => Trace(“Task finally completed”)); 
     } 
    } 
    finally { btnDownload.Enabled = true; } 
} 

मुझे क्या confuses इस लाइन है? क्या यह कार्य को कॉल के माध्यम से पहले ही पूरा नहीं किया जाना चाहिए था। जब कोई? ऐसा लगता है कि यह क्या कह रहा है, "डाउनलोड कार्य समाप्त होने के बाद, इसे खत्म करने के लिए 3 और सेकंड दें।" क्या यह उदाहरण में एक त्रुटि है या क्या मैं इसे गलत समझ रहा हूं?

उत्तर

3

यदि कार्य। जब कोई "डाउनलोड" देता है तो इसका मतलब है कि GetBitmapAsync बिना समय के लौटा।

"प्रतीक्षा प्रतीक्षा करें। टाइमआउटएफ़टर (3000)" यह सुनिश्चित करता है कि कार्य से मूल्य प्राप्त करने में बहुत अधिक समय नहीं लगता है। यह अतिरिक्त 3 एस नहीं देता है।

प्रारंभ करना मुश्किल काम पूरा होने के बाद परिणाम प्राप्त करने में यह कल्पना करना मुश्किल लगेगा।

Bitmap bmp = download.Value; 
:

यह साथ प्रतिस्थापित किया जा सकता

संबंधित मुद्दे