我有一个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) 请仔细阅读我知道这不是一个好习惯等。让我们跳过它。
问题:我必须编译并运行一些代码,即编译输入代码(输入code它是一个字符串)并执行一个方法。此代码可能存在以下问题:
while 没有出口infinitive 递归调用我想使用.net core,但是 .net core doesn't support thread abort。我绝对不想在单独的进程中运行代码。
关于如何在没有 的情况下停止执行代码的任何想法thread abort?