c# - 任务似乎自动开始

标签 c# .net task-parallel-library

我正在移植一个加载时间很长的程序,当我移植它时根本没有改进,因为速度慢是因为访问数据库服务器(而不是次优代码)。我已经使用 Tasks 库将加载移动到一个单独的线程上,现在 UI 在加载时不会卡住,但这确实让我对某些事情感到好奇:

Task.Factory 对象有一个方法 StartNew,它应该创建一个新任务,启动它,并返回对它的引用。这是有道理的,但似乎 Task 构造函数做了完全相同的事情。

当我执行以下操作时:

Task catsFromDB = new Task(() => AddCategoriesFromDB(cts.Token), cts.Token);
catsFromDB.Start();

我收到一个错误 InvalidOperationException,我真的不明白。它似乎相信我已经开始了。我没有。

[编辑]

错误是:“InvalidOperationException,可能无法在已完成的任务上调用启动”

[编辑]

错误是我包含的一些取消代码。在尝试再次运行之前,我需要重置取消。

最佳答案

现在我觉得自己很愚蠢,但让其他人从我的“绿色”(如“新手”、“没有经验”)错误中吸取教训会很有启发:

我需要有问题的操作可以取消和重新运行,所以我实现了一个“CancelLoad”操作,它总是在执行实际加载之前运行。原来是我取消了等着忘记创建新的Token了。

关于c# - 任务似乎自动开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4429480/

相关文章:

c# - 如何从不同线程更新ASP.NET Web表单?

c# - 在另一个线程中执行时间方法并在超时时中止

asp.net - 如何使用带有返回类型的 System.Action?

c# - 显示用于调试 DLL 的控制台应用程序窗口

c# - 声明带有键、值的哈希表

c# - 如何在 C# 和 TPL 中并行处理事件

c# - 何时锁定 .net 中的线程安全集合? (&什么时候不锁定?)

c# - 如何在我的 C# 程序中获取由命令行扫描程序设置的 "ERRORLEVEL"变量?

c# - IIS 反向代理干扰重定向位置 header

c# - 通过反射实现接口(interface)