回答編集履歴

1

追記

2016/10/21 07:54

投稿

iwamoto_takaaki
iwamoto_takaaki

スコア2883

test CHANGED
@@ -3,3 +3,139 @@
3
3
 
4
4
 
5
5
  しかし内容から考えると、関数を渡す方法をお勧めします。
6
+
7
+
8
+
9
+ ```ここに言語を入力
10
+
11
+ Queue<Action<>> queue = new Queue<Action<>>();
12
+
13
+
14
+
15
+ void client_RequestedA()
16
+
17
+
18
+
19
+ // 書き込み先や書き込み内容を渡している
20
+
21
+ var a = new A(//...);
22
+
23
+ queue.Enqueue(a.Do); // 関数の型があればいいのでインターフェイスは不要
24
+
25
+
26
+
27
+
28
+
29
+ void client_RequestedB()
30
+
31
+
32
+
33
+ // クライアントへの応答手段、接続先や書き込み内容を渡している
34
+
35
+ var b = new B(//...);
36
+
37
+ queue.Enqueue(b.Do);
38
+
39
+
40
+
41
+
42
+
43
+ void client_RequestedC()
44
+
45
+
46
+
47
+ // クライアントへの応答手段、apiのurlやパラメータを渡している
48
+
49
+ var c = new C(//...);
50
+
51
+ queue.Enqueue(c.Do);
52
+
53
+
54
+
55
+
56
+
57
+ void myQueueTimer_Elasped()
58
+
59
+ {
60
+
61
+ // キューから要求を引っ張りだして処理
62
+
63
+ var whatToDo = queue.Dequeue();
64
+
65
+ whatToDo.Do();
66
+
67
+ }
68
+
69
+
70
+
71
+ class A
72
+
73
+ {
74
+
75
+ public override void Do()
76
+
77
+ {
78
+
79
+ // ファイル書き込み
80
+
81
+ //...
82
+
83
+ }
84
+
85
+ }
86
+
87
+
88
+
89
+ class B
90
+
91
+ {
92
+
93
+ public override void Do()
94
+
95
+ {
96
+
97
+ // DB書き込み
98
+
99
+ //...
100
+
101
+ // クライアントに返信
102
+
103
+ //...
104
+
105
+ }
106
+
107
+ }
108
+
109
+
110
+
111
+ class C
112
+
113
+ {
114
+
115
+ public override void Do()
116
+
117
+ {
118
+
119
+ var res = .... // WEBAPIにリクエスト
120
+
121
+ webAPI_Responded(res);
122
+
123
+ }
124
+
125
+
126
+
127
+ public webAPI_Responded(Response res) //Responseは架空の型
128
+
129
+ {
130
+
131
+ // レスポンスの処理
132
+
133
+ }
134
+
135
+ }
136
+
137
+ ```
138
+
139
+
140
+
141
+ コンパイルしていないので、細かい点間違えてると思いますがおおむねこのような書き方ができます。