2011-02-06 54 views
2

C#の今後のasync/await機能の設計に疑問があります。c#async await implementation

  1. Task<T>
  2. に新機構を取り付けるの利便性私はのawaitキーワードを置き換えて非同期(async)使用することをお勧めだと思います。 expapleの場合:
  3. トークンを使用して進行中の非同期操作をキャンセルするメカニズムは、私が思うほどエレガントではありません。

Async/awayは素晴らしい機能ですが、LINQと同様に設計されていないと思います。また、私はdesingチームが現在のデザインに危険に喜んでいると感じます。コミュニティのフィードバックを考慮に入れない可能性があります。

あなたはどう思いますか?

+0

Ericの回答後に再度投票する投票。皇帝と服の問題がありますが、問題は不便ですが、本当です。 –

+0

Hans Passant、私はあなたの支持を感謝します。しかし、残念なことに私はEric Lippertではありません。 – Masterile

答えて

6

非同期/離れが大きな特徴ですが、私はそれは同様LINQよう設計されていないと思います。

LINQの設計プロセスと比較して、設計プロセスのどの面が不十分だと感じますか?

また、私はデザインチームが現在のデザインに危険に喜んでいると感じています。コミュニティのフィードバックを考慮に入れない可能性があります。

あなたはどのような印象を与えますか?私たちはかなりの時間コミュニティのフィードバックを招待してきました。それは無視されていません。

あなたはどう思いますか?

私はこれが議論の質問であり、エンジニアリングの問題ではないと思います。これがこの質問の正しいサイトだと確信していますか?

+2

この回答には適切なサイトはありませんか?エンジニアの答えがうまく収まるでしょう。私は個人的には、私が見たほとんどの例でCancellationTokenが大雑把に無視されていると思います。そのホイールを動かして、指先を背中の向こうに横切っておくと、良い結果が出てくるのは、非同期コードの現実世界の問題の90%です。しかし、はい、明示的なステートマシンに対する他の優れた選択肢にwhat-ifsを導入するのは難しいです。それはまだ輝いている。実際のコードで* CancellationTokenを使わずに非同期機能を使用する方法についてのブログ記事を楽しんでいます。フォームまたはウィンドウを考える。 –

+0

エリック、あなたの答えに感謝します。最後の質問は、私が言及した具体的な3つの点に関連していました。 – Masterile

+0

私はそれが非常にうまく設計されたプログラミング言語であると考えているので、私はC#が大好きです。そのために、私はC#チームのほとんどを尊敬しています。 私は、非常に議論の余地があると思われるいくつかの具体的な点について言及します。私にはばかげていますが、私はあなたの意見を尊重します。 StackOverflowユーザーはこのような「主観的な」質問を検閲する権利を持ちますが、それは彼自身の権利です。しかし、私はそれのために非常に失望します。 – Masterile

7

このような設計上の決定は、あなたがこの作業を自分で行うまではほとんど意味をなさない傾向があります。あなたの割り当て:非同期コードを書いて、いつでもそれを止めることができます。あなたの制約:あなたはThread.Abort()を使うことができず、デッドロックを引き起こすことはありません。

4
  1. は、彼らはすでに完全にこのような状況に合うように設計された、TaskTask<T>に多くの作業を投資しています。私はこのタスクを非常に便利だと思っています。なぜなら、以前に使用していたタスク(タスク)が何を期待するのかを正確に知っているからです。私の意見では、新しいものを導入するよりもはるかに優れています。また、新しいタイプをより多くのものにするためには、何が違うのかも分かりません。具体的なアイデアはありますか?

  2. asyncキーワードの目的が不足していると思います。非同期に(部分的に)実行されるメソッドをマークするために使用されます(awaitキーワードを使用する場合)。コンパイラはどのメソッドを "魔法を実行"するかを知る必要があります。非同期に実行されるメソッドを「変換」しません。そのためにはThreadPool.QueueUserWorkItemを使用してください。

  3. 私は本当にこれにコメントすることはできません。あなたの意見では、よりエレガントな解決策は何でしょうか?私はあなたがそれらを共有するなら、マイクロソフトがあなたのフィードバックを考慮に入れると確信しています。

+0

私は、両方の場所、署名、メソッド本体で同じキーワード(async)を使用することを参照します。 – Masterile

+0

キャンセルの解決策は、F#の暗黙のキャンセルと同様のものである可能性があります。 – Masterile

関連する問題