相关疑难解决方法(0)

相当于Thread.Abort的dotnet核心

背景

我有一个Service抽象。每个服务都有它自己的WorkItem。WorkItem能够以一些数据开始。该服务限制了的执行时间WorkItem。假设一个工作项最多可能需要60秒。在此之后,Service应该杀死它。

这段代码是从Standard .NET Framework迁移而来的,我创建了一个Thread运行该Start(model)方法的对象。然后代码是这样的:

Thread t = new Thread(workItem.Start, model);
t.start();
if (!t.Join(TimeSpan.FromSeconds(60)))
    t.Abort();
Run Code Online (Sandbox Code Playgroud)

Thread.Abort被注入了正在运行的线程,从而导致它立即停止异常。

现在,当您调用以下消息时,我将代码移到了dotnet core-您可能知道。Thread.Abort()

System.PlatformNotSupportedException: Thread abort is not supported on this platform.
   at System.Threading.Thread.Abort()
   at ...
Run Code Online (Sandbox Code Playgroud)

目标

我想将的执行时间限制WorkItem为特定的时间。请注意,如果您像这样运行代码行,则此限制也应起作用:

Thread.sleep(61000); // 61 seconds. should be stop after 60 seconds.
Run Code Online (Sandbox Code Playgroud)

进展

在dotnet核心世界中,似乎要使用Task相关的解决方案。因此,我想使用CancellationToken。但是,似乎无法观看“意外事件”并立即停止。我看到的示例使用while (!canceled)循环,不能停止长时间的操作(例如Thread.Sleep(1000000)

怎么做对?

更新资料

我编写了以下示例代码:

public …
Run Code Online (Sandbox Code Playgroud)

c# multithreading .net-core

9
推荐指数
4
解决办法
4551
查看次数

如何在 .net core 中终止/中止线程/任务

请仔细阅读我知道这不是一个好习惯等。让我们跳过它。

问题:我必须编译并运行一些代码,即编译输入代码(输入code它是一个字符串)并执行一个方法。此代码可能存在以下问题:

  • while 没有出口
  • infinitive 递归调用

我想使用.net core,但是 .net core doesn't support thread abort。我绝对不想在单独的进程中运行代码。

关于如何在没有 的情况下停止执行代码的任何想法thread abort

.net c# .net-core

5
推荐指数
0
解决办法
1689
查看次数

标签 统计

.net-core ×2

c# ×2

.net ×1

multithreading ×1