17

私は、開発者がファイバーを多用している C# プロジェクトに参加しています。このプロジェクトの前は、私はそれらについて聞いたことがなく、以前はasync awaitandThreadsBackgroundWorkers をマルチタスク操作に使用していました。今日、なぜ s を使用したのかを彼らに尋ねたところFiber、主な開発者は、デバッグが容易であると言いました。つまり、彼は特定の関数がどのスレッドから来たのかを知っており、スタック内の上位の変数にアクセスすることさえできます.

Fibers を使用することと、新しいものasync awaitを使用してsを使用することの利点と欠点は何だろうと思っていましたThread

PS: .Net 4.5 を使用しています

4

1 に答える 1

18

なぜファイバーを使用したのかを彼らに尋ねたところ、主な開発者は、デバッグが容易であると言いました。つまり、彼は特定の関数がどのスレッドから来たのかを知っており、スタック内の上位の変数にアクセスすることさえできます。

それはまったく奇妙に聞こえます。デフォルト以外のカスタム スケジューラで Task Parallel Library を使用する場合、タスクをThreadPoolTaskSchedulerどのようにスケジュールするかを自分で決めることができます (必ずしも新しいスレッドではありません)。async-await一方、非同期 IO を行う便利な方法を提供します。VS は、あたかも同期的に実行されているかのように使用して、非同期コードをデバッグする機能を提供します。

.NET は BCL でマネージ ラッパーを提供しないため、ファイバーを使用するには、アンマネージ API を呼び出す必要があります。ファイバーのドキュメントでさえ、それらを使用する明確な利点はないと明確に述べています

一般に、ファイバーは、適切に設計されたマルチスレッド アプリケーションに勝る利点はありません。ただし、ファイバーを使用すると、独自のスレッドをスケジュールするように設計されたアプリケーションの移植が容易になります。


ファイバーを使用することと、新しい async await を使用し、スレッドを使用することの利点と欠点は何だろうと思っていました。

を使用async-awaitすると、同期的に実行しているように感じながら、IO バウンドの非同期作業を行うという利点が得られます。Task Parallel Library は、専用スレッド (スレッド プール スレッドまたは新しいスレッド) での作業をスケジュールする簡単な方法を提供し、それらの作業単位をスケジュールするメカニズムにフックできるようにします。フレームワークが提供しなければならないすべての機能を備えた現在、ファイバーを使用する利点はまったくありません。

主な開発者に、タスク並列ライブラリと をそれぞれ使用して、マルチスレッドおよび非同期 IO 作業についていくつかの読み取りを行うように指示する必要があると思いますasync-await。皆さんの生活が楽になると思います。

于 2015-07-04T13:44:04.877 に答える