2015-03-30 4 views
4

Я пытаюсь понять основы async/await, создав простой пример. Im использованием Sqlite с асинхронным связи и у меня есть класс, как это:Async/ждут простой пример

public class User 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

Теперь давайте говорить, что я хочу, чтобы сохранить User к моему UserTable и когда экономия сделано, я хочу, чтобы получить его.

public async ? SaveToDb() 
     { 
      _conn.CreateTableAsync<User>(); 
      await _conn.InsertAsync(new User(){Id=1, Name = "Bill"}); 

      //Code that waits for the save to complete and then retrieves the user 
     } 

Я подозреваю, что мне нужна задача где-то, но я не совсем уверен, как это сделать. Спасибо

+0

https://msdn.microsoft.com/en-us/library/hh191443.aspx http://www.dotnetperls.com/async http://stackoverflow.com/questions/14455293/async-and-await куча примера, на который вы можете посмотреть. – Vinod

+1

Я сомневаюсь, что асинхронный/ожидающий C# может быть до тех пор, пока он не имеет примеров этого во многих местах. Как было связано с @Vinod, простой поиск нашел бы эти примеры и многое другое. – Lukazoid

+1

Вам нужно также подождать 'CreateTableAsync' перед ожиданием' InsertAsync'. –

ответ

7

Вы в основном там уже есть.

При возврате void:

public async Task SomethingAsync() 
{ 
    await DoSomethingAsync(); 
} 

При возврате результата:

public async Task<string> SomethingAsync() 
{ 
    return await DoSomethingAsync(); 
} 

Дело в том, чтобы обратить внимание при возврате значения в методе асинхронном является то, что вы вернете внутренний тип (то есть в этом случай string), а не экземпляр Task<string>.

+1

Erm ... Вы действительно должны просто вернуть DoSomethingAsync(); 'и отбросить' async' из sig. – Aron

+0

@ Арон Не, если он ждет в рамках метода IIRC? – Lloyd

+0

№ 'DoSomethingAsync()' уже возвращает 'Задача'. Поэтому вам не нужен компилятор для разворота 'Task'' await', а затем заверните результат в другую 'Task'. – Aron

1

Если код не возвращает никакого значения, подпись должна быть в этом, возвращаясь Task:

public async Task SaveToDb() 

Else, вам нужно будет указать тип возвращаемого значения в качестве аргумента типа в Task<T>, string в этом образце:

public async Task<string> SaveToDb()