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