目的: 我正在进行负载测试,我需要让Sql Server始终消耗100%的CPU。
方法:
问题:
有时sql命令被中断并且调用了回调。在这种情况下,我需要重试sql命令。在回调中,我执行以下操作:
try
{
// If execution is incomplete, cancel the sqlCommand
if (!result.IsCompleted)
{
command.Cancel();
}
command.EndExecuteNonQuery(result);
}
catch(SqlException ex)
{}
finally
{
// if connection closed, reopen
// retry sql command anyway
}
这是最干净的方法吗?我读到Cancel()不适用于异步命令。并且EndExecuteNonQuery()阻塞直到命令完成执行,在我的情况下,我的运行似乎是真的。此外,重试逻辑是否有意义?
command.Cancel(); EndNonExecuteQuery();
工作?或者会再次调用回调?答案 0 :(得分:1)
Cancel
的主要示例似乎是基于读者的查询。我不知道它是否设计用于异步模式。
如果它不起作用,我怀疑在这里做你想要的唯一支持的方法是使用命令超时 - 所以在(比方说)30秒之后超时并且如果需要重新发出它。奇怪的是,我怀疑设计师花了很长时间考虑使用例如“我需要将CPU保持在100%并永不退出”......