タグ付けされた質問 「task-parallel-library」

Task Parallel Libraryは、.NET 4以降、.NET Frameworkの一部です。これは、開発者が非同期アプリケーションをプログラミングできるようにするAPIのセットです。

4
すべてのサーバー側コードに対してConfigureAwaitを呼び出すベストプラクティス
サーバー側コード(つまり一部ApiController)があり、関数が非同期であるため(それらが返さTask<SomeObject>れる場合)、呼び出す関数を待機するときは常にベストプラクティスと見なされますConfigureAwait(false)か? スレッドコンテキストを元のスレッドコンテキストに戻す必要がないため、パフォーマンスが向上することを読みました。ただし、ASP.NET Web Apiでは、リクエストが1つのスレッドで受信され、関数ConfigureAwait(false)の最終結果を返すときに別のスレッドに入る可能性がある関数と呼び出しを待機している場合ApiController。 私が話していることの例を以下に入力しました: public class CustomerController : ApiController { public async Task<Customer> Get(int id) { // you are on a particular thread here var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false); // now you are on a different thread! will that cause problems? return customer; } }

9
インターフェイスがタスクを返さなければならない場合、操作なしの実装を行うための最良の方法は何ですか?
以下のコードでは、インターフェースのため、クラスLazyBarはそのメソッドからタスクを返す必要があります(引数のために変更することはできません)。もしLazyBarそれが迅速かつ同期的に実行するために起こるものでの実装は珍しいです-メソッドから無操作のタスクを返すための最良の方法は何ですか? 私はTask.Delay(0)以下に行きましたが、関数がたくさん呼び出された場合(引数のために、毎秒数百回と言う)、これがパフォーマンスの副作用を持っているかどうか知りたいです: この構文糖は何か大きなものに巻き戻されますか? アプリケーションのスレッドプールが詰まり始めますか? コンパイラクリーバーはDelay(0)別の方法で処理するのに十分ですか? うreturn Task.Run(() => { });任意の異なること? もっと良い方法はありますか? using System.Threading.Tasks; namespace MyAsyncTest { internal interface IFooFace { Task WillBeLongRunningAsyncInTheMajorityOfImplementations(); } /// <summary> /// An implementation, that unlike most cases, will not have a long-running /// operation in 'WillBeLongRunningAsyncInTheMajorityOfImplementations' /// </summary> internal class LazyBar : IFooFace { #region …

5
複数のタスクにasync / awaitを使用する
私は、それぞれの操作を返すのいずれかで完全にasynchrounousあるAPIクライアント、使用しているTaskかTask<T>、例えば: static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // call API client Console.WriteLine("Deleted post {0}.", siteId); } C#5のasync / awaitオペレーターを使用して、複数のタスクを開始し、すべてが完了するのを待つための正しい/最も効率的な方法は何ですか? int[] ids = new[] { 1, 2, 3, 4, 5 }; Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait()); または: int[] ids = new[] { 1, …

15
Task <T>がタイムアウトで完了するのを非同期的に待つ
Task &lt;T&gt;がいくつかの特別なルールで完了するのを待ちたい:Xミリ秒後に完了しない場合は、ユーザーにメッセージを表示したい。Yミリ秒が経過しても完了しない場合は、自動的にキャンセルをリクエストします。 Task.ContinueWithを使用して、タスクが完了するまで非同期的に待機できます(つまり、タスクが完了したときにアクションが実行されるようにスケジュールします)が、タイムアウトを指定することはできません。Task.Waitを使用して、タスクがタイムアウトで完了するのを同期的に待機できますが、それによってスレッドがブロックされます。タスクがタイムアウトで完了するのを非同期で待機するにはどうすればよいですか?

4
Task.Delayをいつ使用し、Thread.Sleepをいつ使用しますか?
Task.DelayとThread.Sleepをいつ使用するかに関する適切なルールはありますか? 具体的には、一方が他方よりも効果的/効率的であることを提供するための最小値はありますか? 最後に、Task.Delayはasync / awaitステートマシンでコンテキスト切り替えを引き起こすため、それを使用するとオーバーヘッドが発生しますか?

8
タスクとスレッドの違いは何ですか?
C#4.0ではTask、System.Threading.Tasks名前空間にあります。間の真の違いは何であるThreadとはTask。私は自分で学ぶためにいくつかのサンプルプログラム(MSDNから取ったヘルプ)をしました Parallel.Invoke Parallel.For Parallel.ForEach しかし、アイデアがあまり明確ではないため、多くの疑問があります。 Stackoverflowで同様の種類の質問を最初に検索しましたが、この質問のタイトルでは同じ結果を得ることができなかった可能性があります。同じ種類の質問が以前にここに投稿されていることを誰かが知っている場合は、リンクのリファレンスを提供してください。


4
Moqにタスクを返すように指示するにはどうすればよいですか?
宣言するインターフェースを持っています Task DoSomethingAsync(); 私のテストではMoqFrameworkを使用しています: [TestMethod()] public async Task MyAsyncTest() { Mock&lt;ISomeInterface&gt; mock = new Mock&lt;ISomeInterface&gt;(); mock.Setup(arg =&gt; arg.DoSomethingAsync()).Callback(() =&gt; { &lt;my code here&gt; }); ... } 次に、テストでを呼び出すコードを実行しますawait DoSomethingAsync()。そして、テストはその行で失敗します。何が悪いのですか?

11
待機せずにC#で非同期メソッドを安全に呼び出す方法
私が持っているasyncデータを返さないメソッドを: public async Task MyAsyncMethod() { // do some stuff async, don't return any data } データを返す別のメソッドからこれを呼び出しています: public string GetStringData() { MyAsyncMethod(); // this generates a warning and swallows exceptions return "hello world"; } 待機MyAsyncMethod()せずに呼び出すと、Visual Studioで「この呼び出しは待機されないため、現在のメソッドは呼び出しが完了する前に引き続き実行されます」という警告が表示されます。その警告のページには、次のように記載されています。 非同期呼び出しの完了を待たず、呼び出されたメソッドが例外を発生させないことが確実な場合にのみ、警告を抑制することを検討する必要があります。 通話が完了するのを待ちたくないと思います。する必要も時間もありません。しかし、呼び出しがあります例外を発生させます。 私はこの問題に何度か遭遇しましたが、それは共通の解決策が必要な共通の問題であると確信しています。 結果を待たずに非同期メソッドを安全に呼び出すにはどうすればよいですか? 更新: 私が結果を待つことを示唆している人々のために、これは私たちのWebサービス(ASP.NET Web API)上のWebリクエストに応答しているコードです。UIコンテキストで待機すると、UIスレッドは解放されたままになりますが、Web要求の呼び出しで待機すると、要求に応答する前にタスクが完了するのを待機するため、理由もなく応答時間が長くなります。

4
非同期操作を同期的に待機し、Wait()がプログラムをここでフリーズする理由
序文:単なる解決策ではなく、説明を求めています。私はすでに解決策を知っています。 タスクベースの非同期パターン(TAP)、非同期、待機に関するMSDNの記事の調査に数日費やしましたが、細かい詳細についてはまだ混乱しています。 私はWindowsストアアプリ用のロガーを書いており、非同期と同期の両方のロギングをサポートしたいと考えています。非同期メソッドはTAPに従い、同期メソッドはこれをすべて隠す必要があり、通常のメソッドのように見え、機能します。 これは、非同期ロギングのコアメソッドです。 private async Task WriteToLogAsync(string text) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFile file = await folder.CreateFileAsync("log.log", CreationCollisionOption.OpenIfExists); await FileIO.AppendTextAsync(file, text, Windows.Storage.Streams.UnicodeEncoding.Utf8); } 今、対応する同期メソッド... バージョン1: private void WriteToLog(string text) { Task task = WriteToLogAsync(text); task.Wait(); } これは正しいように見えますが、機能しません。プログラム全体が永久にフリーズします。 バージョン2: うーん..タスクが開始されなかったのでしょうか? private void WriteToLog(string text) { Task task = WriteToLogAsync(text); …

6
非同期voidメソッドによってスローされた例外をキャッチする
Microsoft for .NETの非同期CTPを使用して、呼び出しメソッドで非同期メソッドによってスローされた例外をキャッチすることは可能ですか? public async void Foo() { var x = await DoSomethingAsync(); /* Handle the result, but sometimes an exception might be thrown. For example, DoSomethingAsync gets data from the network and the data is invalid... a ProtocolException might be thrown. */ } public void DoFoo() { try { …

4
Parallel.ForEachとTask.Factory.StartNew
以下のコードスニペットの違いは何ですか?どちらもスレッドプールスレッドを使用しませんか? たとえば、コレクション内の各アイテムの関数を呼び出したい場合、 Parallel.ForEach&lt;Item&gt;(items, item =&gt; DoSomething(item)); vs foreach(var item in items) { Task.Factory.StartNew(() =&gt; DoSomething(item)); }

8
複数の非同期タスクを実行し、それらがすべて完了するのを待つ
コンソールアプリケーションで複数の非同期タスクを実行し、それらがすべて完了するのを待ってから、さらに処理する必要があります。 世の中にはたくさんの記事がありますが、読むほど混乱するようです。タスクライブラリの基本原則を読み、理解しましたが、どこかにリンクがありません。 タスクをチェーンして別のタスクが完了した後に開始することは可能であることを理解しています(これは、私が読んだすべての記事のシナリオとほぼ同じです)、すべてのタスクを同時に実行したいので、一度知りたいそれらはすべて完了しました。 このようなシナリオの最も簡単な実装は何ですか?

10
結果が異なる複数のタスクを待機しています
私には3つのタスクがあります。 private async Task&lt;Cat&gt; FeedCat() {} private async Task&lt;House&gt; SellHouse() {} private async Task&lt;Tesla&gt; BuyCar() {} 私のコードを続行する前に、これらすべてを実行する必要があり、それぞれの結果も必要です。結果に共通点はありません 3つのタスクが呼び出されて完了するのを待って結果を取得するにはどうすればよいですか?

12
非同期メソッドを同期的に呼び出す
私にはasync方法があります: public async Task&lt;string&gt; GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; } このメソッドを同期メソッドから呼び出す必要があります。 GenerateCodeAsyncこれを同期的に機能させるために、メソッドを複製せずにこれを行うにはどうすればよいですか? 更新 しかし、合理的な解決策は見つかりませんでした。 しかし、私はHttpClientすでにこのパターンを実装していることがわかります using (HttpClient client = new HttpClient()) { // async HttpResponseMessage responseAsync = await client.GetAsync(url); // sync HttpResponseMessage responseSync = client.GetAsync(url).Result; }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.