await AsyncMethod ()и await await Task.Factory.StartNew (AsyncMethod)

Учитывая следующий метод:

public async Task DoSomethingAsync() {
    // do some work
    await OpenSomeFileAsync();
    return new MyObject();
}

Есть ли разница между:

public async void SomeEventHandler(EventArgs args) {
    var myObject = await await Task.Factory.StartNew>( 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

Я пытался переработать его без использования анонимной асинхронной функции, и мне стало интересно, почему бы просто не написать асинхронный метод и не ждать его, вместо того, чтобы вызывать StartNew и передавать асинхронную функцию?

9
задан Justin Lang 17 July 2012 в 23:11
поделиться