Skip to content

Instantly share code, notes, and snippets.

@haacked
Created January 24, 2013 00:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save haacked/4616032 to your computer and use it in GitHub Desktop.
Save haacked/4616032 to your computer and use it in GitHub Desktop.
Example usage of an async lambda.
Assert.Throws<SomeException>(async () => await obj.GetAsync());
@haacked
Copy link
Author

haacked commented Jan 24, 2013

I saw some code that suggested to me that not everyone knows how you pass an await call as a lambda expression. It turns out the async keyword can apply to a lambda expression as well.

@nigel-sampson
Copy link

Unless Assert.Throws takes a Func of Task instead of Action the compiler interprets the lambda as an async void method. This means it can't "await" the lambda and discover the exception.

@haacked
Copy link
Author

haacked commented Jan 24, 2013

Thanks nigel! I saw the same thing here: http://blogs.msdn.com/b/pfxteam/archive/2012/02/08/10265476.aspx

@shiftkey
Copy link

Somewhat related, I started hacking on a library to make testing Tasks better... https://github.com/pprovost/assertex

Goddamn it, its not on NuGet. I'll go stand in the corner until I've fixed that...

@haacked
Copy link
Author

haacked commented Jan 24, 2013

@shiftkey
Copy link

Just pushed AssertEx up to NuGet. Here's a teaser:

If you want to inspect the Task:

public class Subject
{
    public Task GetAsync()
    {
        return Task.Run(() => { throw new SomeException(); });
    }
}

...

AssertEx.TaskThrows<SomeException>(obj.GetAsync);

@shiftkey
Copy link

I need to write up a decent wiki on how to test async code - all the horrors are coming back to me now...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment