相关疑难解决方法(0)

如何中止/取消TPL任务?

在一个线程中,我创建一些System.Threading.Task并启动每个任务.

当我做一个.Abort()杀死线程时,任务不会中止.

我怎样才能传递.Abort()给我的任务?

.net c# multithreading task abort

144
推荐指数
7
解决办法
15万
查看次数

使用Thread.Abort()有什么问题

所以我知道你不应该使用

Thread.Abort()
Run Code Online (Sandbox Code Playgroud)

但我从未得到过很好的解释.是否存在性能损失或隐藏的问题?

我知道你不能忽略/吞下ThreadAbortException(这是有道理的)

.net c# multithreading

62
推荐指数
5
解决办法
3万
查看次数

如何为不接受取消令牌的异步功能设置超时?

我有这个代码处理的Web请求;

Response = await Client.SendAsync(Message, HttpCompletionOption.ResponseHeadersRead, CToken);
Run Code Online (Sandbox Code Playgroud)

在读取响应头之后和内容完成读取之前返回.当我打电话给这一行来获取内容时......

return await Response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

我希望能在X秒后停止它.但它不接受取消令牌.

.net c# asynchronous httpclient task-parallel-library

7
推荐指数
1
解决办法
6591
查看次数

杀死.NET 4任务?

我可以用一些方法来杀死.NET 4.0 Task对象,就像我们可以使用旧的和危险的Thread.Abort()一样,在SO线程中讨论(双关语并保存小猫!)

肯尼

.net multithreading task-parallel-library

5
推荐指数
1
解决办法
2201
查看次数

在没有CancellationToken的情况下停止任务

我正在使用具有async方法但不是CancellationToken重载的外部库.

现在我正在使用另一个StackOverflow问题的扩展方法来添加CancellationToken:

    public async static Task HandleCancellation(this Task asyncTask, CancellationToken cancellationToken)
    {
        // Create another task that completes as soon as cancellation is requested. http://stackoverflow.com/a/18672893/1149773
        TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
        cancellationToken.Register(() =>
            tcs.TrySetCanceled(), useSynchronizationContext: false);
        Task cancellationTask = tcs.Task;

        // Create a task that completes when either the async operation completes, or
        // cancellation is requested.
        Task readyTask = await Task.WhenAny(asyncTask, cancellationTask);

        // In case of cancellation, register a continuation to observe any unhandled …
Run Code Online (Sandbox Code Playgroud)

c# cancellation async-await

5
推荐指数
1
解决办法
4478
查看次数

如何取消正在运行的任务?

我想取消正在运行的任务(当用户按下退出键时)。当我点击“escape”键 Form_KeyDown 运行但不取消任务时!

CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token=new CancellationToken();

private async void Search_Button_ClickAsync(object sender, EventArgs e)
{
  token = tokenSource.Token;
  await (Task.Factory.StartNew(() =>
           {
             //...my program
           },
           token));

private void Form_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Escape)
  {
    tokenSource.Cancel();
  }
}
Run Code Online (Sandbox Code Playgroud)

c# task cancellation cancellationtokensource cancellation-token

2
推荐指数
1
解决办法
8119
查看次数

如何使用带有CancellationToken的Task包装单个同步操作?

我只有一个同步操作,可能需要很多时间才能完成。该操作的调用者提供了一个CancellationToken符号,并且在令牌被取消后,该操作应立即停止(在这种情况下,取消后的几毫秒内也将起作用)。

如何将其包装在带有CancellationToken的任务中?

我无法更改调用代码或调用本身。

曾经是: LongOperation();

我现在所拥有的: await Task.Run(() => LongOperation(), cancellationToken).ConfigureAwait(false);

显然,这是行不通的,因为您必须在给的操作中轮询令牌Task.Run

.net c# async-await

1
推荐指数
1
解决办法
518
查看次数