Twilio C#用の最新のナゲットパッケージをアップグレードし、ほとんどの使用法が静的メソッドと非同期呼び出しに基づいていることに気付きました。Twilio C#5.xライブラリのアーキテクチャ上の理由
非同期/待機とインスタンスメソッドを使用しない理由はありますか?
Twilio C#用の最新のナゲットパッケージをアップグレードし、ほとんどの使用法が静的メソッドと非同期呼び出しに基づいていることに気付きました。Twilio C#5.xライブラリのアーキテクチャ上の理由
非同期/待機とインスタンスメソッドを使用しない理由はありますか?
ライブラリが真async
呼び出しを行っていないので、ライブラリにasync
メソッドを使用していない主な理由はあります。 true I/O操作を意味し、CPUにバインドされたコードの一部がTask.Run()
にラップされているわけではありません。あなたがウェブアプリを持っていて、第三者のlibがTask.Run()
の操作をヒープすると、メソッドがasync
であると思われていると想像することができます。これは、あなたのアプリのパフォーマンスとスループットには向いていません。
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
ライブラリによって非同期がサポートされています。たとえばMessageResource.Createの代わりにMessageResource.CreateAsyncを呼び出す – dprothero