我已经掌握了异步等待的概念并且偶尔使用它,但确实有一些关于最佳实践的问题.
是否可以在while(条件)循环中使用await来继续获取可能存在的数据,直到while条件发生变化,例如stopProcessingMessages = false.
在诸如winforms之类的应用程序中,当UI在它的线程上运行时,在按钮单击等操作上使用async/await是相当简单的,但是如果我想在整个控制台应用程序,甚至是窗口中异步执行,那该怎么办呢?服务.什么是最初开始第一次等待任务的最佳做法,那就是Task.Run(()=> ...)?
我希望我在第二个问题上有意义.我想充分利用异步并充分利用它,但只需要了解如何在它向所有其他异步函数冒泡之前启动初始异步操作.
不使用正确的代码块道歉我在火车上使用我的智能手机.
我遇到的问题是try/catch块没有捕获到异常.问题发生在command.ExecuteReader(),但它永远不会被捕获.我在调试模式下运行,并且已经尝试了一些关于调试器设置的建议选项但没有用.
我想提一下,我使用SQLite作为我的提供程序,我可以看到它抛出SQLiteException,但问题仍然存在.是否存在未捕获异常的特定情况?(除了StackOverflowException,ThreadAbortedException等...)
public IEnumerable<dynamic> Query(string sql, params object[] parms)
{
try
{
return QueryCore(sql, parms);
}
catch (Exception ex)
{
throw new DbException(sql, parms, ex);
}
}
private IEnumerable<dynamic> QueryCore(string sql, params object[] parms)
{
using (var connection = CreateConnection())
{
using (var command = CreateCommand(sql, connection, parms))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
yield return reader.ToExpando();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还想补充一点,如果我对数据库产生正确的查询,我会得到结果,但是当我中断查询时,抛出异常,但是没有被捕获.