Example #1
0
        internal static Task <T> PartialAsync <T>(PartialAccessor <Task <T> > partial)
        {
            Task <T> task = null;

            partial(ref task);
            return(task.Safe <T>());
        }
Example #2
0
        internal static T GetPartial <T>(PartialAccessor <T> action)
        {
            T value = default(T);

            action(ref value);
            return(value);
        }
Example #3
0
        internal static Task PartialAsync(PartialAccessor <Task> partial)
        {
            Task task = null;

            partial(ref task);
            return(task.Safe());
        }
Example #4
0
 /// <summary>
 /// Partial methods cannot return a value, so we instead make partial accessors
 /// use ref params. This means you cannot effectively make a partial which is
 /// async. This code helps create a design pattern where a partial takes a ref Task
 /// param and we can await the PartialAsync of it. Given a partial method:
 /// partial void FooAsync(ref Task&lt;string&gt; task)
 /// we can say string foo = await PartialAsync&lt;string&gt;(FooAsync);
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="self"></param>
 /// <param name="partial"></param>
 /// <returns></returns>
 internal static Task <T> PartialAsync <T>(this object self, PartialAccessor <Task <T> > partial)
 {
     return(PartialAsync(partial));
 }
Example #5
0
 /// <summary>
 /// Partial methods cannot return a value, so we instead make partial accessors
 /// use ref params. This helper can be used to write code more normally so we get
 /// the out-param or default when calling a partial method. Given a partial method:
 /// partial void GetFoo(ref string foo)
 /// we can say string foo = this.GetPartial&lt;string&gt;(GetFoo);
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="self"></param>
 /// <param name="action"></param>
 internal static T GetPartial <T>(this AVObject self, PartialAccessor <T> action)
 {
     return(GetPartial(action));
 }