blob: e04a810ebceed00ddd87d14c43e48053a821fe4a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using System.Linq;
namespace N.M
{
class C
{
public static async Task<int> AsyncMethod ()
{
await Task.Delay (1);
return 0;
}
public static async Task NestedAsyncAnonymousMethod ()
{
Action a = async delegate {
await Task.Yield();
};
await Task.Yield();
}
public static int Main ()
{
var m = typeof (C).GetMethod ("AsyncMethod");
var attr = m.GetCustomAttribute<AsyncStateMachineAttribute> ();
if (attr == null)
return 1;
if (attr.StateMachineType == null)
return 2;
Func<Task<int>> a = async () => await AsyncMethod ();
var c = typeof (C).GetMethods (BindingFlags.NonPublic | BindingFlags.Static).Where (l =>
l.IsDefined (typeof (AsyncStateMachineAttribute))).Count ();
if (c != 1)
return 3;
m = typeof (C).GetMethod ("NestedAsyncAnonymousMethod");
attr = m.GetCustomAttribute<AsyncStateMachineAttribute> ();
if (attr == null)
return 10;
if (attr.StateMachineType == null)
return 11;
var n = typeof (C).GetNestedTypes (BindingFlags.NonPublic).Single (l => l.Name.Contains ("NestedAsyncAnonymousMethod"));
if (n == null)
return 12;
m = n.GetMethods (BindingFlags.NonPublic | BindingFlags.Static).Single (l => l.Name.Contains ("m__"));
attr = m.GetCustomAttribute<AsyncStateMachineAttribute> ();
if (attr == null)
return 13;
if (attr.StateMachineType == null)
return 14;
return 0;
}
}
}
|