Skip to content

Instantly share code, notes, and snippets.

@davidfowl
Last active June 3, 2017 22:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidfowl/b76f26361b391fe967096a8f6850446a to your computer and use it in GitHub Desktop.
Save davidfowl/b76f26361b391fe967096a8f6850446a to your computer and use it in GitHub Desktop.
I made this shit up
// Anything that can fire a one shot callback
interface IEventable
{
bool IsTriggered { get; set; }
void Register(Action<object> callback, object state);
}
class Task : IEventable { }
class ManualResetEvent : IEventable { }
class CancellationToken : IEventable { }
public class Sample
{
ManualResetEvent e = new ManualResetEvent();
async Task Main()
{
// Cancel DoSometingFancy when DoSomethingBoring completes
await DoSometingFancy(DoSomethingBoring());
// Cancel DoSometingFancy when the ManualResetEvent event is triggered
await DoSometingFancy(e);
}
async Task DoSomethingBoring()
{
// I can await the ManualResetEvent because it implements IEventable
await e;
}
async Task DoSometingFancy(IEventable cancellationToken)
{
await Task.Delay(1000);
// Pretend like we're doing something long running and waiting for cancellation
await cancellationToken;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment