await AsyncMethod() versus await await Task.Factory.StartNew<TResult>(AsyncMethod)

Viewed 11176

Given the following method:

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

Is there a difference between:

public async void SomeEventHandler(EventArgs args) {
    var myObject = await await Task.Factory.StartNew<Task<MyObject>>( DoSomethingAsync);
    // do something with myObject
}

and:

public async void SomeEventHandler(EventArgs args) {
    var myObject = await DoSomethingAsync();
    // do something with myObject
}

I was thinking that the "do some work" part of DoSomethingAsync would happen immediately in a new task in the first case, but to be honest I don't really understand fully how Tasks, async and await are working, and I'm pretty sure I'm just overcomplicating things for myself.

EDIT:

This question came about from looking at this Metro example: http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782

Specifically in MainPage.xaml.cs, they have this:

var unused = Task.Factory.StartNew(async () => { // some work... });
// unused is of type Task<TResult>

I was trying to rework it without using an anonymous async function and I started wondering, why not just write an async method and await it, instead of calling StartNew and handing in an async function?

2 Answers
Related