Предвид следния метод:
public async Task<MyObject> DoSomethingAsync() {
// do some work
await OpenSomeFileAsync();
return new MyObject();
}
Има ли разлика между:
public async void SomeEventHandler(EventArgs args) {
var myObject = await await Task.Factory.StartNew<Task<MyObject>>( DoSomethingAsync);
// do something with myObject
}
и:
public async void SomeEventHandler(EventArgs args) {
var myObject = await DoSomethingAsync();
// do something with myObject
}
Мислех си, че частта „свърши малко работа“ на DoSomethingAsync ще се случи незабавно в нова задача в първия случай, но честно казано не разбирам напълно как работят Tasks, async и await и съм доста разбира се, че просто усложнявам нещата за себе си.
РЕДАКТИРАНЕ:
Този въпрос възникна от разглеждането на този пример за Metro: http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782
По-конкретно в MainPage.xaml.cs, те имат това:
var unused = Task.Factory.StartNew(async () => { // some work... });
// unused is of type Task<TResult>
Опитвах се да го преработя, без да използвам анонимна асинхронна функция и започнах да се чудя защо просто не напиша асинхронен метод и го изчакам, вместо да извикам StartNew и да предам асинхронна функция?
async
/await
ключови думи беше да не се налага да го правите. - person Jeff Mercado   schedule 18.07.2012async
! - person Stephen Cleary   schedule 18.07.2012