type
Post
status
Published
date
Sep 13, 2023
slug
c-sharp-async-task-completion-source
summary
C#异步编程-16 TaskCompletionSource
tags
C#
CS
category
学习记录
icon
password
Property
Aug 9, 2024 11:59 AM
TaskCompletionSource简介
Task.Run 创建Task
另一种方式就是用TaskCompletionSource创建Task
TaskCompletionSource让你在稍后开始和结束的任意操作中创建Task
它会为你提供一个可手动执行的“从属”Task
指示操作何时结束或发生故障
他对IOBound类工作比较理想
- 可以获得Task 的所有好处(传播值,异常,Continuation等)
- 不需要在操作的时候阻塞线程
使用TaskCompletionSource

初始化一个实例即可
他有一个Task属性可以返回一个Task
该Task完全与TaskCompletionSource对象控制
调用图中的任意一个方法都会给Task发信号
完成、故障、取消
这些方法只能调用一次,如果再次调用:
- setXXX会抛出异常
- tryXXX会返回False
例子:
调用此方法相当于调用Task.Factory.StsrtNew,并使用TaskCreationOptions.LongRunning来创建非线程池的线程。
TaskCompletionSource的真正魔力
它创建Task,但是并不占用线程
GetAnswerToLife例子
Delay 例子
Task.Delay
例子master
Task.Delay相当于异步版本的Thread.Sleep
- 作者:Kitety
- 链接:https://www.kitety.com/article/c-sharp-async-task-completion-source
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章


.png?table=block&id=fa81f9ab-c0da-4f4e-a935-0567380c36d0&t=fa81f9ab-c0da-4f4e-a935-0567380c36d0&width=1080&cache=v2)
.png?table=block&id=55df38cd-a361-41ee-a75d-c17615e78d6b&t=55df38cd-a361-41ee-a75d-c17615e78d6b&width=1080&cache=v2)
.png?table=block&id=23baa6c3-e959-44c5-a699-ce0df9ba58ee&t=23baa6c3-e959-44c5-a699-ce0df9ba58ee&width=1080&cache=v2)
_(1).jpg?table=block&id=a716c7ee-7105-4a3f-8133-a15129086419&t=a716c7ee-7105-4a3f-8133-a15129086419&width=1080&cache=v2)
.jpg?table=block&id=2e9784d9-1d6e-44fc-9106-f0c576ddcb8f&t=2e9784d9-1d6e-44fc-9106-f0c576ddcb8f&width=1080&cache=v2)

.png?table=block&id=c0772cdb-ee08-49f4-b2f3-c804586bb769&t=c0772cdb-ee08-49f4-b2f3-c804586bb769&width=1080&cache=v2)

.png?table=block&id=b43ea4ae-a57d-4962-80ba-12280979702b&t=b43ea4ae-a57d-4962-80ba-12280979702b&width=1080&cache=v2)
