Với phương pháp sau đây:chờ AsyncMethod() so với chờ đợi Task.Factory.StartNew <TResult> (AsyncMethod)
public async Task<MyObject> DoSomethingAsync() {
// do some work
await OpenSomeFileAsync();
return new MyObject();
}
Có một sự khác biệt giữa:
public async void SomeEventHandler(EventArgs args) {
var myObject = await await Task.Factory.StartNew<Task<MyObject>>(DoSomethingAsync);
// do something with myObject
}
và:
public async void SomeEventHandler(EventArgs args) {
var myObject = await DoSomethingAsync();
// do something with myObject
}
Tôi đã nghĩ rằng phần "làm một số công việc" của DoSomethingAsync sẽ xảy ra ngay lập tức trong một tác vụ mới trong trường hợp đầu tiên, nhưng thành thật mà nói tôi không thực sự hiểu đầy đủ về cách Nhiệm vụ, không đồng bộ và đang chờ đợi đang làm việc, và tôi khá chắc chắn rằng tôi chỉ là những điều quá phức tạp cho bản thân mình.
EDIT:
Câu hỏi này đến khoảng từ nhìn vào ví dụ này Metro: http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782
Cụ thể trong MainPage.xaml.cs, họ có điều này:
var unused = Task.Factory.StartNew(async() => { // some work... });
// unused is of type Task<TResult>
Tôi đã cố gắng để rework nó mà không cần sử dụng một chức năng async nặc danh và tôi bắt đầu tự hỏi, tại sao không chỉ viết một phương thức async và chờ nó, thay vì gọi StartNew và bàn giao trong một hàm async?
Tại sao bạn sẽ muốn viết nó ra như vậy? Toàn bộ điểm sử dụng từ khóa 'async'/'await' mới là để bạn không phải làm như vậy. –
Dường như một đoạn mã ví dụ không hợp lệ của số điện thoại –
Tôi chỉ xem bản thân mình và ... Wow. Vâng, đó là "chính thức Windows SDK mẫu" mã là ** thực sự xấu **! Tôi nghĩ họ đã hoàn toàn bỏ lỡ điểm 'không đồng ý'! –