自定义异步方法:
public static async Task TransactionTestAsync() { Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId); int res = await AsyncTest(); //自定义的异步方法 Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId); } public static async Task<int> AsyncTest() { return await Task.Run(() => { return 1; }); }
打印出来的线程前后基本是不一致的
下面使用dapper的异步方法:
public static async Task TransactionTestAsync() { Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId); string sql1 = "INSERT INTO `person` (`Name`, `Sex`, `Age`) VALUES ('test', '1', '25');select @@IDENTITY;"; int res = await MySqlHelper.ExecuteScalarAsync<int>(sql1); //调用Dapper里面的异步方法 Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId); }
重复运行上面代码,当使用dapper的异步方法时打印出来的线程ID总是一样
按照我的理解来说使用await后面的代码都相当于是回调,那么应该使用与主线程不一样的线程,也就是前后线程不一致,那么像dapper提供的异步方法是怎么实现现在与主线程一样的呢?
相关问题
- Sql CE Inconsistent with Multiple Statements
- Dapper insert a list?
- Using Dapper with BLOBs and SQL Server CE
- WPF MVVMLight:在ViewModel中,开子线程为ObservableCollectio
- Dapper execute stored procedure raises ArgumentExc
相关文章
- WPF MVVMLight:在ViewModel中,开子线程为ObservableCollectio
- 并发编程中,什么是共享变量?
- 求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,
- C# winform 关于async和await 实际用法过程中,偶尔报错问题
- 异步调用等待期间数据被篡改导致数据不一致问题!
- 博客园混用 Dapper 跟 EF 方式?
- mysql我在insert的时候设置了一个开始时间new Date(),启动异步方法,修改这条数据,
- Using Dapper-dot-net, how do I map SQL uniqueident
MySqlHelper.ExecuteScalarAsync
方法中要加上async/await
前后是否同一线程取决于Async方法内部。
通常来说,调用真正的异步,方法的前后线程是不一样的。
但是,有些情况下,异步是假的。比如
public static async Task<int> AsyncTest(int x)
{
if (x == 0) return 0; // 假异步,同步执行
if (x == 1) return await Task.FromResult<int>(0);//假异步,同步执行
return await Task.Run(() => x);//真异步
}