我对如何真正创造适当的等待功能感到困惑。我没有完全理解整个概念,可能是由于语言障碍:)
A
public async Task<int> InsertASync(string tableName, Dictionary<string, string> data)
{
int r = 0;
using (SQLiteConnection con = NewConnection())
{
await con.OpenAsync();
using (SQLiteCommand com = new SQLiteCommand(Query_Insert(tableName, data), con))
{
r = await com.ExecuteNonQueryAsync();
}
con.Close();
}
return r;
}
或
乙
public Task<int> InsertASync(string tableName, Dictionary<string, string> data)
{
return Task<int>.Run(async () =>
{
int r = 0;
using (SQLiteConnection con = NewConnection())
{
await con.OpenAsync();
using (SQLiteCommand com = new SQLiteCommand(Query_Insert(tableName, data), con))
{
r = await com.ExecuteNonQueryAsync();
}
con.Close();
}
return r;
});
}
我想知道它的原因是因为我通过便宜的方式创造了可以接受的方法。
实施例
public void DoHeavyWork() //this will block UI
{
//Do work
}
public Task DoHeavyWorkASync() //this won't
{
return Task.Run(() =>
{
DoHeavyWork();
});
}
答案 0 :(得分:1)
您希望转到A
路线。编译器将负责创建返回的任务并返回实际的整数(如果可用)。
您可以阅读Asynchronous Programming - Pause and Play with ...以获得有关编译器内部工作(如何将方法转换为状态机)的一些深入信息。