我正在移植一个加载时间很长的程序,当我移植它时,它根本没有得到改善,因为缓慢是因为访问数据库服务器(而不是次优代码)。我已将加载移动到一个单独的线程上Tasks
库,现在 UI 在加载时不会冻结,但它确实让我对某些事情感到好奇:
The Task.Factory
对象有一个方法StartNew
它应该创建一个新任务,启动它,并返回对其的引用。这似乎有道理,但似乎Task
构造函数做了完全相同的事情。
当我执行以下操作时:
Task catsFromDB = new Task(() => AddCategoriesFromDB(cts.Token), cts.Token);
catsFromDB.Start();
我收到一个错误InvalidOperationException
我真的不明白。它似乎相信我已经开始了。我没有。
[EDIT]
错误是:“InvalidOperationException,可能无法对已完成的任务调用 Start”
[EDIT]
错误是我包含的一些取消代码。我需要在尝试再次运行之前重置取消。
现在我觉得很愚蠢,但让其他人从我的“绿色”(如“新”、“缺乏经验”)错误中学习将是有启发性的:
我需要有问题的操作是可取消和可重新运行的,因此我实现了一个“CancelLoad”操作,该操作总是在执行实际加载之前运行。原来我取消等待后忘记创建新的Token了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)