无法重新运行已取消的任务

ElektroStudios

我正在尝试运行一个异步任务,将其取消,然后再次运行,但是当我第一次取消它时,我再也无法运行它了,这是我做错了吗?

Private TypeTask As Threading.Tasks.Task
Private TypeTaskCTS As New Threading.CancellationTokenSource
Private TypeTaskCT As Threading.CancellationToken = TypeTaskCTS.Token
Private RequestCancel As Boolean = True

Private Sub TypeWritter(ByVal CancellationToken As Threading.CancellationToken,
                        ByVal [Text] As String,
                        ByVal TypeSpeed As Integer,
                        ByVal PauseSpeed As Integer)

    ' For each Character in text to type...
    For Each c As Char In [Text]

        ' If not want to cancel then...
        If Not CancellationToken.IsCancellationRequested Then

            ' Type the character.
            Console.Write(CStr(c))

            ' Type-Wait.
            Threading.Thread.Sleep(TypeSpeed)

            If ".,;:".Contains(c) Then
                ' Pause-Wait.
                Threading.Thread.Sleep(PauseSpeed)
            End If

        Else ' want to cancel.

            ' Reset the request cancellation.
            RequestCancel = False

            ' Exit iteration.
            Exit For

        End If ' CancellationToken.IsCancellationRequested

    Next c ' As Char In [Text]

End Sub

Public Sub TypeWritter(ByVal [Text] As String,
                       Optional ByVal TypeSpeed As Integer = 75,
                       Optional ByVal PauseSpeed As Integer = 400)

    ' Run the asynchronous Task.
    TypeTask = Threading.Tasks.
               Task.Factory.StartNew(Sub()
                                         TypeWritter(TypeTaskCT, [Text], TypeSpeed, PauseSpeed)
                                     End Sub, TypeTaskCT)

    ' Until Task is not completed or is not cancelled, do...
    Do Until TypeTask.IsCompleted OrElse TypeTask.IsCanceled

        If RequestCancel Then

            If Not TypeTaskCTS.IsCancellationRequested Then
                TypeTaskCTS.Cancel
            End If

            RequestCancel = False
            Exit Do

        End If

    Loop ' TypeTask.IsCompleted OrElse TypeTask.IsCanceled

End Sub

Public Sub TypeWritterLine(ByVal [Text] As String,
                           Optional ByVal TypeSpeed As Integer = 75,
                           Optional ByVal PauseSpeed As Integer = 400)

    TypeWritter([Text] & vbCrLf, TypeSpeed, PauseSpeed)
    Console.WriteLine()

End Sub

注意变量:

Private RequestCancel As Boolean = True

设置为True在初次使用时取消任务(只是为了使事情更快以测试在我第二次尝试调用Task时发生的情况,而我期望出现错误)。

我正在尝试的用法是这样的:

Sub Main()

    RequestCancel = True ' This should cancel this task:
    TypeWritterLine("Some text")

    ' And this task should run as normally, but it doesn't, I get an empty line:
    TypeWritterLine("Some other text")

End Sub
丹尼斯·卡塞尔(Dennis Kassel)

这是设计使然。任务始终执行一次,即使之前未开始取消也是如此。这意味着您必须注意不要多次调用任务的Start方法。为了“运行”任务,您将不得不再次调用Task.Factory.StartNew方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

任务已取消异常(ThrowForNonSuccess)

来自分类Dev

如何创建已取消的任务

来自分类Dev

重新启动ScheduledThreadPoolExecutor中的已取消任务

来自分类Dev

任务并行库异常处理“任务已取消。”

来自分类Dev

为什么已取消任务并再次运行新任务?

来自分类Dev

等待已取消的任务完成,然后再继续执行

来自分类Dev

Visual Studio 2013“任务已取消”

来自分类Dev

如何确保已取消的Celery任务在所有工作进程全部关闭并返回后永远不会运行

来自分类Dev

子级任务已取消,父级已完成?

来自分类Dev

已取消的任务也显示为已完成

来自分类Dev

单击按钮后无法取消异步任务

来自分类Dev

通过CompletionService检查已取消的任务

来自分类Dev

YouTube API上传“任务已取消”

来自分类Dev

TFS 2015:发布工件-“任务已取消”

来自分类Dev

任务似乎已注册,但无法运行?

来自分类Dev

Dask-如何取消和重新提交已暂停的任务?

来自分类Dev

无法在已卸载的组件上执行React状态更新。取消useEffect中的所有任务

来自分类Dev

已取消任务时任务仍在运行

来自分类Dev

检索传递给已取消协程/任务的参数

来自分类Dev

任务并行库异常句柄“任务已取消。”

来自分类Dev

如何还原已取消的任务

来自分类Dev

重新运行已取消的pthread

来自分类Dev

如何确保已取消的Celery任务在所有工作进程全部关闭并返回后再也不会运行

来自分类Dev

取消已经运行的任务

来自分类Dev

取消并重新启动任务

来自分类Dev

如何为已取消的任务添加延续

来自分类Dev

非法状态异常:任务已安排或取消

来自分类Dev

取消任务并将状态设置为“已取消”

来自分类Dev

无法从其他任务运行 gradle 任务

Related 相关文章

热门标签

归档