Awaitable.cs
1 //
2 // Copyright (c) Microsoft. All rights reserved.
3 // Licensed under the MIT license.
4 //
5 // Microsoft Bot Framework: http://botframework.com
6 //
7 // Bot Builder SDK GitHub:
8 // https://github.com/Microsoft/BotBuilder
9 //
10 // Copyright (c) Microsoft Corporation
11 // All rights reserved.
12 //
13 // MIT License:
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 //
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 //
25 // THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 //
33 
34 using System;
35 using System.Runtime.CompilerServices;
36 
37 namespace Microsoft.Bot.Builder.Internals.Fibers
38 {
39  public interface IAwaiter<out T> : INotifyCompletion
40  {
41  bool IsCompleted { get; }
42 
43  T GetResult();
44  }
45 }
46 
47 namespace Microsoft.Bot.Builder.Dialogs
48 {
50 
55  public interface IAwaitable<out T>
56  {
61  Builder.Internals.Fibers.IAwaiter<T> GetAwaiter();
62  }
63 
68  public sealed class AwaitableFromItem<T> : IAwaitable<T>, IAwaiter<T>
69  {
70  private readonly T item;
71 
72  public AwaitableFromItem(T item)
73  {
74  this.item = item;
75  }
76 
78  {
79  get { return true; }
80  }
81 
83  {
84  return item;
85  }
86 
87  void INotifyCompletion.OnCompleted(Action continuation)
88  {
89  throw new NotImplementedException();
90  }
91 
93  {
94  return this;
95  }
96  }
97 
98  public partial class Awaitable
99  {
105  public static IAwaitable<T> FromItem<T>(T item)
106  {
107  return new AwaitableFromItem<T>(item);
108  }
109  }
110 }
Explicit interface to support the compiling of async/await.
Definition: Awaitable.cs:55
Namespace for internal machinery that is not useful for most developers and may change in the future...
Creates a IAwaitable<T> from item passed to constructor.
Definition: Awaitable.cs:68
Namespace for the internal fibers machinery that is not useful for most developers and may change in ...
Root namespace for the Microsoft Bot Builder SDK.
Builder.Internals.Fibers.IAwaiter< T > GetAwaiter()
Get the awaiter for this awaitable item.