我试图安排一个工作单元在后台处理,并产生一个结果。最初我正在考虑扩展 Task 类,并安排自定义任务的实例。 (想想 Java 中的 Future 和 Runnable)每个任务都会封装多个输入/输出属性。多个任务同时处理,并且完全自主。
但是,我找不到任何这样做的例子,所以我开始怀疑这是否是正确的方法。有人可以提供使用 System.Threading.Tasks 正确执行此操作的示例
您不需要继承 Task
。只需实例化一个 Task
对象,并在构造函数中为其提供要执行的方法。
以下示例计算一个值并将其与一个标志一起存储在一个字段中以指示操作已完成:
int _taskResult;
bool _taskFinished;
/// <summary>Starts a background task to compute a value and returns immediately.</summary>
void BeginTask()
{
_taskFinished = false;
Task task = new Task(() =>
{
var result = LongComputation();
lock (this)
{
_taskResult = result;
_taskFinished = true;
}
});
task.Start();
}
/// <summary>Performs the long computation. Called from within <see cref="BeginTask"/>.</summary>
int LongComputation()
{
// Insert long computation code here
return 47;
}
当然,在您检索结果的其他代码中,您必须在检查 _taskFinished
和 _taskResult
之前锁定同一对象。
我是一名优秀的程序员,十分优秀!