2017-02-28 5 views
0

Twilio C#用の最新のナゲットパッケージをアップグレードし、ほとんどの使用法が静的メソッドと非同期呼び出しに基づいていることに気付きました。Twilio C#5.xライブラリのアーキテクチャ上の理由

非同期/待機とインスタンスメソッドを使用しない理由はありますか?

+0

ライブラリによって非同期がサ​​ポートされています。たとえばMessageResource.Createの代わりにMessageResource.CreateAsyncを呼び出す – dprothero

答えて

0

ライブラリがasync呼び出しを行っていないので、ライブラリにasyncメソッドを使用していない主な理由はあります。 true I/O操作を意味し、CPUにバインドされたコードの一部がTask.Run()にラップされているわけではありません。あなたがウェブアプリを持っていて、第三者のlibがTask.Run()の操作をヒープすると、メソッドがasyncであると思われていると想像することができます。これは、あなたのアプリのパフォーマンスとスループットには向いていません。

+1

これは意味をなさない。 asyncでラップされた "CPU bound code"を必要としないコードを非同期で実行することができます。例えば、HttpClientのようなREST APIへのリクエストは、完全にうまくいっています。 –

+0

HttpClientは_true_ 'async'呼び出しを行います。それはCPUに束縛されたコードではありません。 – JohanP

+0

@JLuisEstrada 'HttpClient'は' async'実装で 'Task.Run()'を使用しません。 – JohanP

2

Twilio Developer Educator here。これは、私たちが聞くのが難しい場合でも、開発者コミュニティから本当に聞きたい貴重なフィードバックです。

1.私はあなたの質問の2つの部分に対処してください。1.非同期/不足のサポートについて。

.NET 4.5.1以降をターゲットとしている場合、ライブラリは実際にこれをサポートしています。これらのプラットフォームでは、真の非同期をサポートするフードの下でHttpClientを使用します。たとえば、MessageResource.Createなどの代わりにMessageResource.CreateAsyncを呼び出します。ここでは、これに関するドキュメントからのメモです:https://www.twilio.com/docs/libraries/csharp/migrating-your-csharp-dot-net-application-twilio-sdk-4x-5x#asynchronous-methods

2.リソースの静的な性質について。

私たちは開発者がアプリケーション全体にクライアントオブジェクトを渡す必要がないようにしたいと考えました。誰もが依存性注入フレームワークを使用するわけではなく、できるだけ多くの摩擦を除去したいと考えました。そうする人にとって、彼らは自分のクライアントオブジェクトを注入するためにうまくいくでしょう。

これは、ユニットテストのストーリーが理想よりも小さくなっていることを認めており、これをより簡単にするように働いています。まず、自分のクライアントを模擬してさまざまな回答を返す方法を説明するブログ記事に取り掛かります。ライブラリを更新し、これをできるだけ簡単にするためのツールを追加することで、引き続きそれを続けます。

更新: Twilio APIリクエストを模擬する方法の例をまとめました。これをさらに簡単にするためのアップデートをリリースする予定です。 https://github.com/dprothero/twilio-mock-example

関連する問題