標籤:style blog http color io os ar strong sp
Async, Await 是基於 .NEt 4.5架構的, 用於處理非同步,防止死結的方法的開始和結束, 提高程式的響應能力。比如:
Application area Supporting APIs that contain async methods
Web access HttpClient , SyndicationClient
Working with files StorageFile, StreamWriter, StreamReader, XmlReader
Working with images MediaCapture, BitmapEncoder, BitmapDecoder
WCF programming Synchronous and Asynchronous Operations
Async, Await 不會產生新的線程。 但是Task.Run 方法就是多線程的。 Asynchronous code is code that returns upon completion. By Task.Run, we can make is a multithreaded.
Take files as an example I encountered today:
public async Task SendFallMail(string path){ try { mail.Subject = subjectFall; mail.Body = "Fall down!"; using (MailMessage ms = mail) { ms.Attachments.Add(new Attachment(path)); using (SmtpClient sc = SmtpServer) { Task t = Task.Factory.StartNew(() => { sc.Send(ms); }); await t; } } File.Delete(path); } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
It should wait t which is sending an e-mail wihich attached an picture in path.
Then delete the pic in path, wihch is working properly after I use the using statement...
Without using the using statement, it shows IO exception said:
Process Cannot Access the file “\Path” because it is being used by some other process
C# Async, Await and using statements