Task_Dispose_NotCompleted错误,但我没有';我不知道为什么

本文关键字:我不知道 为什么 NotCompleted Dispose 错误 Task | 更新日期: 2023-09-27 18:25:01

今天我遇到了一个关于Tasks的非常奇怪的错误。在我的代码中,我尝试以这种方式使用using语句:

protected MyClass() {
    using(var initTask = new Task(() => Init())) {
        initTask.ContinueWith(result => InitCompletedCallBack(result));
        initTask.Start();
    }
}
protected virtual void Init() {}
private void InitCompletedCallBack(AsyncResult result) {
    // Stuff
}

当我执行此代码时,我得到一个Task_Dispose_NotComplete错误。InitCompletedCallBack完成后会发生错误。

在尝试时,我将用途改为:

using(var initTask = new Task(() => Init())) {
    initTask.ContinueWith(result => InitCompletedCallBack(result));
    initTask.Start();
    Thread.Sleep(1000);
}

这起到了作用。然而,当应用程序启动时,这段代码将被执行多次,从而冻结应用程序大约15-20秒。但这表明(任务内部的)某件事至少需要一秒钟才能完成。

你知道是什么导致了这种行为吗?

提前谢谢。

编辑当我将等待时间设置为100ms时,就会发生错误。StackTrace的第一行是:

bei System.Threading.Tasks.Task.Dispose(Boolean disposing)
bei System.Threading.Tasks.Task.Dispose()
bei MyClass..ctor() in c:'Path'to'source'MyClass.cs:line 33.

第33行是使用块的闭合括号。

Task_Dispose_NotCompleted错误,但我没有';我不知道为什么

你知道是什么导致了这种行为吗?

您的代码导致了这种行为。您处理了一项尚未完成的任务。你为什么要在处理它的地方处理它?使用块放在哪里有意义吗?

不要处理仍依赖的任务。请删除using块。