Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 创建不执行任何操作的TPL任务,以在触发时完成并产生结果_.net_Task Parallel Library - Fatal编程技术网

.net 创建不执行任何操作的TPL任务,以在触发时完成并产生结果

.net 创建不执行任何操作的TPL任务,以在触发时完成并产生结果,.net,task-parallel-library,.net,Task Parallel Library,使用TPL创建一个任务的好方法是什么?该任务本身不做任何事情,但只存在等待,直到系统中的某个其他事件触发它并返回任务的数据 如果触发事件本身是一个任务或遵循预期的IAsyncResult模式,则内置支持。但是什么是不同形式的活动呢 不满意的解决方案: 我能做的最接近的事情是创建一个任务,该任务在执行时返回一个可变对象包含的值。下面是一个使用1元素数组作为可变对象的示例: var task = new Task<ReturnType>( resultContainer =>

使用TPL创建一个任务的好方法是什么?该任务本身不做任何事情,但只存在等待,直到系统中的某个其他事件触发它并返回任务的数据

如果触发事件本身是一个
任务
或遵循预期的
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);