gpt4 book ai didi

c# - 什么是创建可等待函数的正确方法

转载 作者:行者123 更新时间:2023-11-30 17:54:19 24 4
gpt4 key购买 nike

我对如何实际创建适当的可等待函数感到进退两难。我没有完全理解整个概念,可能是由于语言障碍 :)

一个

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;
}

B

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();
});
}

最佳答案

您想走 A 路线。编译器将负责创建返回的任务并返回可用的实际整数。

您可以阅读 Asynchronous Programming - Pause and Play with ... 以获取有关编译器内部操作的一些深入信息(您的方法如何转换为状态机)

关于c# - 什么是创建可等待函数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16132788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com