If I understand you correctly, you can do it like this:
using (cancellationToken.Register(() => {
// this callback will be executed when token is cancelled
task_comletion_source.TrySetCanceled();
})) {
// ...
await task_comletion_source.Task;
}
Note that it will throw an exception on your await, which you have to handle.