举一个简单的例子,假设我的事件是命中数据库的东西。
SystemTimer Ticker = new SystemTimer() { Interval = TimeSpan.FromSeconds(5).TotalMilliseconds, AutoReset = true };
Ticker.Elapsed += HitTheDatabase;
让我们说HitTheDatabase
是async void
,并以await connection.OpenAsync();
等方式利用等待性。如果只是制作方法void
并让它connection.Open();
,那么这会有什么好处吗?
我的理解是已逝去的事件
这是对的吗?或者有人可以用图表来解释它吗?
就像我有
Ticker.Interval = 1000;
Ticket.Elapsed += Wait2Seconds;
和
private static void Wait2Seconds(object source, ElapsedEventArgs e)
{
Thread.Sleep(2000);
}
就像
Time | 0:01 | 0:02 | 0:03 | 0:04 |
-----------------------------------------------------------
Thread 1 | |-------waiting------|
Thread 2 | |-------waiting------|
Thread 3 | |-------waiting------|
Thread 4 | |-------waiting------|
使用async
的{{1}}版本会有什么不同吗?
答案 0 :(得分:0)
这种好处将来自与数据库交互的自然异步性质。如果您编写代码以同步访问数据库,则在等待数据库响应时将阻塞线程。异步调用将释放您打到数据库的线程,直到它响应。这适用于任何命中数据库而不是特定于计时器的内容。有关更多信息,请查看benefits of asyc Db access。