Pre-xUnit 2.2, you can use TaskBuilder to get Task<T> using the same style as async : -
let [<Fact>] ``Can consume NEventStore InMemory`` () = task { let store = NesGateway.createInMemory () let! finalDirection = playCircuit store test <@ CounterClockWise = finalDirection @> }
Extract (do not accept it, take the full source , as you will find it relevant for all types of Task - munging):
open System.Threading open System.Threading.Tasks [<AbstractClass>] type AsyncBuilderAbstract() = // AsyncBuilder is marked sealed, so we need this wrapper member __.Zero() = async.Zero() member __.Return t = async.Return t member __.ReturnFrom t = async.ReturnFrom t member __.Bind(f,g) = async.Bind(f,g) member __.Combine(f,g) = async.Combine(f,g) member __.Delay f = async.Delay f member __.While(c,b) = async.While(c,b) member __.For(xs,b) = async.For(xs,b) member __.TryWith(b,e) = async.TryWith(b,e) type TaskBuilder(?ct : CancellationToken) = inherit AsyncBuilderAbstract() member __.Run f : Task<'T> = Async.StartAsTask(f, ?cancellationToken = ct) type UntypedTaskBuilder(?ct : CancellationToken) = inherit AsyncBuilderAbstract() member __.Run f : Task = Async.StartAsTask(f, ?cancellationToken = ct) :> Task let task = new TaskBuilder()
source share