c# - Task_Dispose_NotCompleted 错误,但我不知道为什么

标签 c# task using-statement

今天我遇到了一个关于任务的非常奇怪的错误。在我的代码中,我尝试以这种方式使用 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 行是 using block 的右括号。

最佳答案

Any ideas what causes this behavior?

您的代码会导致此行为。您处理了一项尚未完成的任务。为什么要在你丢弃的地方丢弃它? using-block 放在哪里有意义吗?

不要处置您仍然依赖的任务。删除 using block 。

关于c# - Task_Dispose_NotCompleted 错误,但我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001164/

相关文章:

c# - 进程无法访问该文件,因为它正在被另一个进程在第二次调用时使用

c# - 如何对创建任务的方法进行单元测试

vb.net - 嵌套 using 语句

c# - 尝试/捕获 Image.FromStream() 而不捕获 using 语句的其余部分?

c# - 如何在 Windows 8 c# 中将图像 url 保存到本地文件

c# - 康威的生命游戏 - 初始化

c# - 使用不同的参数并行运行相同的代码多次

C#任务多队列节流

C#/Informix : Do I need to explicitly call Close on my DB Connection if it's in a using statement?

c# - 使用 ObjectAnimationUsingKeyFrames 切换可见性