【发布时间】:2016-12-19 10:14:34
【问题描述】:
我无法在单击取消按钮时取消异步/等待调用。如果在网格中加载数据需要很长时间,我想取消查询。我是使用 async/await 方法的新手,并参考了许多示例,但无法锻炼。请看我下面的代码,请帮忙。谢谢
namespace MyFirstAsync
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
CancellationTokenSource cts ;
private async void btnExecute_Click(object sender, EventArgs e)
{
cts = new CancellationTokenSource();
try
{
string connectionString = "Data Source=G50-80;Initial Catalog=HPSF_Compdb;User ID=sa;Password=sql@2012";
string sqlQuery = "select top 900000 * from requestevent.result";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
await conn.OpenAsync(cts.Token);
SqlDataReader reader = await cmd.ExecuteReaderAsync(cts.Token);
DataTable dt = new DataTable();
//cts.Cancel();
await Task.Run(() => dt.Load(reader), cts.Token);
gvData.Invoke(new gvDelegate(UpdateDataToGrid), new object[] { dt });
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public delegate void gvDelegate(DataTable dt);
public void UpdateDataToGrid(DataTable dt)
{
gvData.DataSource = dt;
}
private void btncancel_Click(object sender, EventArgs e)
{
cts.Cancel();
}
}
}
【问题讨论】:
-
那么当你运行这段代码时会发生什么?你有任何例外吗?您提供的详细信息越多,您的问题就越有可能得到解答。
-
嗨鲁本,不,它没有抛出任何错误,只是完成了查询并将数据加载到网格视图而不接受取消请求。我不知道如何调试它和排除故障。
标签: c# async-await