Я пытаюсь реализовать мгновенную отмену задачи в моем коде c #.Я выполняю долго выполняемый сохраненный процесс в методе, и в моей форме у меня есть кнопка, чтобы отменить задачу.
Что происходит здесь (я так думаю), как только запускается команда sql, IsCancellationRequested не являетсяпоэтому проверил задание не отменяется.
Я знаю, что могу использовать SqlCommand.Cancel, но по какой-то причине это невозможно для меня.
вот мой код, дайте мне знать, если яя что-то здесь упускаю:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private CancellationTokenSource _tokenSource = null;
private CancellationToken _token;
private Task _executionTask = null;
SqlConnection con = new SqlConnection("myconnectionstring");
SqlCommand cmd;
private void Form1_Load(object sender, EventArgs e)
{
_tokenSource = new CancellationTokenSource();
_token = _tokenSource.Token;
}
private void btnStart_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true; //show progress
_executionTask = Task.Factory.StartNew(this.LongRunningTask, _token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
private void btnStop_Click(object sender, EventArgs e)
{
_tokenSource.Cancel();
pictureBox1.Visible = false; //hide progress
}
private void LongRunningTask()
{
while (true)
{
try
{
if (_token.IsCancellationRequested)
{
_token.ThrowIfCancellationRequested();
}
con.Open();
cmd = new SqlCommand("sp_SaveSendMail", con);
cmd.ExecuteNonQuery(); //once this line gets started, control never go up to check IsCancellationRequested
break;
}
catch (OperationCanceledException ex)
{
con.Close();
Console.WriteLine("Operation Cancelled");
break;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
break;
}
}
}
}