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).