我有一组异步方法,用于处理大量数据库查询和编译,速度非常快。这些方法在大多数情况下都非常出色,并且对我的软件产生了很好的效果。然而,最近我遇到了一个小问题:偶尔用户会出错,导致软件拉取数据的时间范围变得非常巨大,数据适配器在获取信息之前超时。通常,在同步方法中,您可以使用try/catch来处理此类问题,但我尝试过这种方法却没有成功。是否有一种异步处理异常的方法,使其像同步方法一样抛出异常,以便我的try/catch可以正常工作?
以下是我使用的数据适配器异步方法示例:
以下是我使用的数据适配器异步方法示例:
private async Task<DataTable> WWQuery2Run
(string A, string B, string C, string D)
{
using ( var conn = new System.Data.SqlClient.SqlConnection(ReportResources.ConnString) )
{
var temp = new DataTable();
var DA = new SqlDataAdapter(string.Format(ReportResources.Instance.CureInfoQueries["WWQuery2"], A, B, C, D), conn);
await Task.Run(() => DA.Fill(temp));
return temp;
}
}
编辑:
我意识到,尝试处理超时异常并不是一个好的实践方式。因此,我添加了一种方法,在进入显示异步方法之前计算持续时间,并警告用户该操作需要的时间长度,让他们有选择中止编译的选项。有了这个方法,如果用户选择继续,我将查询的超时时间增加到可以覆盖所有情况(除了最糟糕的情况)。我还在程序中添加了一些项目的描述,包括计算的持续时间,以便用户在尝试查询和编译之前就知道操作所需的时间。
感谢@Murad Garibzada的协助。