コード例 #1
0
 /// <summary>
 /// Try/Finally workflow.
 /// </summary>
 /// <typeparam name="TResult">Computation return type.</typeparam>
 /// <param name="body">The computation to execute.</param>
 /// <param name="finally">Finalizer.</param>
 public static Cloud <TResult> TryFinally <TResult>(Cloud <TResult> body, CloudAction @finally)
 {
     return(MBrace.Cloud.TryFinally(body, @finally.Body));
 }
コード例 #2
0
 /// <summary>
 ///     Wraps given value in cloud computation that returns it.
 /// </summary>
 /// <typeparam name="TResult">Value type.</typeparam>
 /// <param name="value">Value to be wrapped.</param>
 /// <returns>A cloud computation that will return the value once executed.</returns>
 public static Cloud <TResult> Select <TResult>(TResult value)
 {
     return(Cloud.FromValue(value));
 }
コード例 #3
0
        // Linq comprehension syntax friendly methods.

        /// <summary>
        ///     Creates a cloud computation that chains a group of callbacks together.
        /// </summary>
        /// <typeparam name="T">Initial return type.</typeparam>
        /// <typeparam name="U">Secondary return type.</typeparam>
        /// <typeparam name="V">Final result type.</typeparam>
        /// <param name="workflow">Initial workflow to execute.</param>
        /// <param name="continuation">Callback to primary and secondary result values.</param>
        /// <param name="projection">Result reducing function.</param>
        /// <returns>A Cloud workflow </returns>
        public static Cloud <V> SelectMany <T, U, V>(this Cloud <T> workflow, Func <T, Cloud <U> > continuation, Func <T, U, V> projection)
        {
            return(workflow.Then(t => continuation(t).Then(u => Cloud.FromValue(projection(t, u)))));
        }
コード例 #4
0
        /// <summary>
        ///     Creates a cloud computation that binds a workflow to a callback.
        /// </summary>
        /// <typeparam name="TSource">Source type.</typeparam>
        /// <typeparam name="TResult">Result type.</typeparam>
        /// <param name="workflow">Initial workflow to be executed.</param>
        /// <param name="continuation">Callback workflow to be executed on completion of the former.</param>
        /// <returns>A combined workflow.</returns>
        public static Cloud <TResult> Then <TSource, TResult>(this Cloud <TSource> workflow, Func <TSource, TResult> continuation)
        {
            Func <TSource, Cloud <TResult> > f = x => continuation(x).AsCloud();

            return(Builder.Bind <TSource, TResult>(workflow, f.AsFSharpFunc()));
        }
コード例 #5
0
 /// <summary>
 ///     Creates a cloud computation that binds a workflow to a callback.
 /// </summary>
 /// <typeparam name="TSource">Source type.</typeparam>
 /// <typeparam name="TResult">Result type.</typeparam>
 /// <param name="workflow">Initial workflow to be executed.</param>
 /// <param name="continuation">Callback workflow to be executed on completion of the former.</param>
 /// <returns>A combined workflow.</returns>
 public static Cloud <TResult> Then <TSource, TResult>(this Cloud <TSource> workflow, Func <TSource, Cloud <TResult> > continuation)
 {
     return(Builder.Bind <TSource, TResult>(workflow, continuation.AsFSharpFunc()));
 }
コード例 #6
0
 /// <summary>
 /// Performs cloud computation discarding its result.
 /// </summary>
 /// <typeparam name="TResult">Return type of the given workflow.</typeparam>
 /// <param name="workflow">The workflow to ignore.</param>
 public static CloudAction Ignore <TResult>(this Cloud <TResult> workflow)
 {
     return(new CloudAction(MCloud.Ignore(workflow)));
 }