.net 创建不执行任何操作的TPL任务,以在触发时完成并产生结果
使用TPL创建一个任务的好方法是什么?该任务本身不做任何事情,但只存在等待,直到系统中的某个其他事件触发它并返回任务的数据 如果触发事件本身是一个.net 创建不执行任何操作的TPL任务,以在触发时完成并产生结果,.net,task-parallel-library,.net,Task Parallel Library,使用TPL创建一个任务的好方法是什么?该任务本身不做任何事情,但只存在等待,直到系统中的某个其他事件触发它并返回任务的数据 如果触发事件本身是一个任务或遵循预期的IAsyncResult模式,则内置支持。但是什么是不同形式的活动呢 不满意的解决方案: 我能做的最接近的事情是创建一个任务,该任务在执行时返回一个可变对象包含的值。下面是一个使用1元素数组作为可变对象的示例: var task = new Task<ReturnType>( resultContainer =>
任务
或遵循预期的IAsyncResult
模式,则内置支持。但是什么是不同形式的活动呢
不满意的解决方案:
我能做的最接近的事情是创建一个任务,该任务在执行时返回一个可变对象包含的值。下面是一个使用1元素数组作为可变对象的示例:
var task = new Task<ReturnType>(
resultContainer => ((ReturnType[])resultContainer)[0],
new ReturnType[1]);
这允许其他一些代码等待任务:
ResultType result = await task;
左鼻孔代码气味:当任务中没有完成任何实际工作时,必须启动任务并执行其入口点方法
右鼻孔代码气味:仅用于包含任务返回值的持有者对象
有人想澄清一下吗?使用
TaskCompletionSource
。按如下方式创建源:
var source = new TaskCompletionSource<ReturnType>();
Task task = source.Task; // Hand this off to the awaiting code.
source.SetResult(theResult);
如果不需要结果(仅指示何时完成以及成功/失败),请使用带有伪类型()的TaskCompletionSource
。
source.SetResult(theResult);