c# - How does a Task get to know when it has completed? -


the task does not maintain wait handle performance reasons, , lazily constructs 1 if code ask 1 of it.

how task know has been completed?

one argue implementer sets result on taskcompletionsource in implementation explain modern implementations , re-writes such system.io.filestream.begin/endreadtask.

i followed task.iscomplete property; in every instance, internal bitwise flag field (m_stateflags) set trysetresult / trysetexception methods indicate status of task.

but not cover cases.

what method such this?

public async task fooasync() {     await task.run(() => { }); } 

how task know has been completed?

as describe on blog (overview, more detail), there 2 kinds of tasks: delegate tasks (which execute code) , promise tasks (which represent event).

delegate tasks complete when delegate completes.

promise tasks completed external signal, using taskcompletionsource<t> (or equivalent methods internal bcl).