タグ付けされた質問 「c#-5.0」

C#バージョン5.0での開発に関連する問題。

24
非同期のTask <T>メソッドを同期的に実行するにはどうすればよいですか?
私は非同期/待機について学習していて、非同期メソッドを同期的に呼び出す必要がある状況に出くわしました。どうやってやるの? 非同期メソッド: public async Task&lt;Customers&gt; GetCustomers() { return await Service.GetCustomersAsync(); } 通常の使用法: public async void GetCustomers() { customerList = await GetCustomers(); } 私は以下を使ってみました: Task&lt;Customer&gt; task = GetCustomers(); task.Wait() Task&lt;Customer&gt; task = GetCustomers(); task.RunSynchronously(); Task&lt;Customer&gt; task = GetCustomers(); while(task.Status != TaskStatus.RanToCompletion) ここからも提案を試みましたが、ディスパッチャーが一時停止状態の場合は機能しません。 public static void WaitWithPumping(this Task task) { if (task …

5
複数のタスクにasync / awaitを使用する
私は、それぞれの操作を返すのいずれかで完全にasynchrounousあるAPIクライアント、使用しているTaskかTask&lt;T&gt;、例えば: 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 =&gt; DoSomething(1, i, blogClient).Wait()); または: int[] ids = new[] { 1, …

3
Task.Runをメソッドに入れて非同期にする必要がありますか?
私は非同期待機を最も単純な形で理解しようとしています。この例のために2つの数値を追加する非常に単純なメソッドを作成したいと思います。当然のことながら、処理時間はまったくありません。ここで例を作成するだけです。 例1 private async Task DoWork1Async() { int result = 1 + 2; } 例2 private async Task DoWork2Async() { Task.Run( () =&gt; { int result = 1 + 2; }); } 待機DoWork1Async()すると、コードは同期または非同期で実行されますか? Task.RunUIスレッドをブロックしないように、メソッドを待機可能かつ非同期にするために同期コードをラップする必要がありますか? 私のメソッドがaであるTaskかreturn であるかを理解しようとしていますTask&lt;T&gt;が、コードをラップしTask.Runて非同期にする必要があります。 馬鹿げた質問だと思いますが、ネット上で非同期Task.Runまたはa やにラップされていないコードを待っている人々の例を目にしStartNewます。

3
C#で非同期メソッドをどのように作成しますか?
私が読んだすべてのブログ投稿は、C#で非同期メソッドを使用する方法を説明していますが、奇妙な理由で、独自の非同期メソッドを作成して使用する方法を説明していません。だから私は今私の方法を消費するこのコードを持っています: private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } そして私はこのメソッドを書いたCountToAsync: private Task&lt;DateTime&gt; CountToAsync(int num = 1000) { return Task.Factory.StartNew(() =&gt; { for (int i = 0; i &lt; num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x =&gt; DateTime.Now); } これ、の使用Task.Factory、非同期メソッドを作成する最良の方法ですか、それとも別の方法で作成する必要がありますか?
196 c#  async-await  c#-5.0 

4
C#5非同期CTP:EndAwait呼び出しの前に、生成されたコードで内部「状態」が0に設定されるのはなぜですか?
昨日、新しいC#の「非同期」機能について、特に生成されたコードがどのように見えるか、およびthe GetAwaiter()/ BeginAwait()/ EndAwait()呼び出しについて詳しく説明しました。 C#コンパイラーによって生成された状態マシンを詳細に調べたところ、理解できない2つの側面がありました。 生成されたクラスにDispose()メソッドと$__disposing変数が含まれているのに、それらが使用されていないように見える(クラスがを実装していないIDisposable)理由。 通常、0が「これが初期エントリポイントであること」を意味するように見えるときに、内部state変数が0に設定される理由EndAwait() 最初の点は、非同期メソッド内でもっと興味深いことを実行することで解決できると思いますが、誰か他の情報があれば、聞いて喜んでいます。ただし、この質問は2番目の点についての詳細です。 非常にシンプルなサンプルコードを次に示します。 using System.Threading.Tasks; class Test { static async Task&lt;int&gt; Sum(Task&lt;int&gt; t1, Task&lt;int&gt; t2) { return await t1 + await t2; } } ...そしてこれがMoveNext()、ステートマシンを実装するメソッドのために生成されるコードです。これはReflectorから直接コピーされます-私は言葉にできない変数名を修正していません: public void MoveNext() { try { this.$__doFinallyBodies = true; switch (this.&lt;&gt;1__state) { case 1: break; case 2: goto Label_00DA; …
195 c#  asynchronous  c#-5.0 

6
Process.Startに相当する非同期はありますか?
タイトルが示唆するように、Process.Start私が待つことができる同等のものはありますか(別のアプリケーションまたはバッチファイルを実行できます)? 私は小さなコンソールアプリで遊んでいますが、これは非同期を使用して待つのに最適な場所のように見えましたが、このシナリオのドキュメントが見つかりません。 私が考えているのはこれらの線に沿ったものです: void async RunCommand() { var result = await Process.RunAsync("command to run"); }
141 c#  async-await  c#-5.0 

5
.net 4でのasync-awaitの使用
私は現在、C#5の非同期待機機能から多くの利益を得るアプリケーションの作成を開始しています。しかし、使用するVSと非同期ランタイムのバージョンがわかりません。 OSの人気チャートを見ると、Windows XPをさらに3年間サポートする必要があります。.net 4.5は新しいバージョンのWindowsでのみ動作するようなので、.net 4.0をターゲットにする必要があります。開発マシンはWindows 7を使用しているため、新しいバージョンのVSを使用しても問題ありません。 これを行うには、まずコンパイラを選択する必要があります。 VS2010とAsyncCTP VS2012プレビュー(および最終的に到着)、ターゲットを.net 4.0に設定 Mono(2.12はasync-awaitがあるように見えますが、IDEとしてMonoDevelopよりもVSを使用するのが好きです) コード生成のバグが少ないのはどれですか。Jon Skeetのブログを見ると、VS2012プレビューはCTPよりもコードジェネレーターを使用することはありません。 さらに重要なのは、どのランタイムを使用するか? VS2012には、.net 4で使用する再配布可能な非同期ランタイムが含まれていますか? AsyncCTPランタイムを参照して、プレビューを使用してコードをコンパイルすることができました。しかし、CTPには奇妙なライセンス条件があるため、長期的なソリューションとしては適切ではないように見えます。 または、サードパーティの実装を使用する必要がありますか?たぶん、monoには1つありますか? ライブラリを配布するために、ある種のインストーラーではなく、単にアプリケーションと同じディレクトリにdllを置くことを好みます。 また、mono + Linux / MacOSで変更を加えなくてもバイナリが機能するようにしたいのですが。したがって、ランタイムは組み込みのモノ(おそらく2.12)と互換性があるか、非Windows OSでの使用を許可する必要があります。

6
Visual Studio 2015でC#6サポートを無効にするにはどうすればよいですか?
バックグラウンド C#6を有効にしてVS 2015で開発しているプロジェクトがあり、C#6を使用せずにVS 2013を使用する開発者がプロ​​ジェクトを開く必要がある場合があります。 この特定のソリューション内でC#6を使用するつもりはありません(私が望むだけ)。 問題 Visual StudioとReSharperは、C#6がサポートされていない以前のバージョンのVisual Studioでソリューションを動作不能にする有用なC#6言語構成を提案しています。 私がしましたReSharperのC#6のサポートを無効にしますが、私はC#は、ソリューション全体を越えています/無効の上限に見えることはできません。 質問 ソリューション内またはVisual Studio 2015内でC#をC#5機能に制限するにはどうすればよいですか?

2
非同期アクションデリゲートメソッドはどのように実装しますか?
少し背景情報。 私はWeb APIスタックを学び、SuccessやErrorCodesなどのパラメーターを持つ「Result」オブジェクトの形式ですべてのデータをカプセル化しようとしています。 ただし、メソッドが異なれば結果やエラーコードも異なりますが、結果オブジェクトは一般的に同じ方法でインスタンス化されます。 時間を節約し、C#の非同期/待機機能の詳細を学ぶために、Web APIアクションのすべてのメソッド本体を非同期アクションデリゲートでラップしようとしていますが、ちょっとした問題に巻き込まれています... 次のクラスがあるとします。 public class Result { public bool Success { get; set; } public List&lt;int&gt; ErrorCodes{ get; set; } } public async Task&lt;Result&gt; GetResultAsync() { return await DoSomethingAsync&lt;Result&gt;(result =&gt; { // Do something here result.Success = true; if (SomethingIsTrue) { result.ErrorCodes.Add(404); result.Success = false; } …

2
Task <int>はどのようにしてintになりますか?
この方法があります: async Task&lt;int&gt; AccessTheWebAsync() { HttpClient client = new HttpClient(); Task&lt;string&gt; getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); // You can do work here that doesn't rely on the string from GetStringAsync. DoIndependentWork(); string urlContents = await getStringTask; //The thing is that this returns an int to a method that has a return type …

9
asp.netでサイトが機能しなくなったSystem.Web.WebPages.Razor.Configuration.HostSectionをキャストできません
サーバーでこのような問題があります [A] System.Web.WebPages.Razor.Configuration.HostSectionを[B] System.Web.WebPages.Razor.Configuration.HostSectionにキャストできません。タイプAは「System.Web.WebPages.Razor、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」のコンテキスト「Default」の「C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System」にあります.Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '。タイプBは、「System.Web.WebPages.Razor、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」のコンテキスト「Default」の「C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System」にあります.Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '。 説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細と、コードのどこで発生したかについて、スタックトレースを確認してください。 例外の詳細:System.InvalidCastException:[A] System.Web.WebPages.Razor.Configuration.HostSectionを[B] System.Web.WebPages.Razor.Configuration.HostSectionにキャストできません。タイプAは「System.Web.WebPages.Razor、Version = 2.0.0.0、Culture …

9
「yield return DoSomethingAsync()」を待つことは可能ですか?
通常のイテレーターブロック(つまり、 "yield return")は、 "async"および "await"と互換性がありませんか? これは私が何をしようとしているのかについての良い考えを与えます: async Task&lt;IEnumerable&lt;Foo&gt;&gt; Method(String [] Strs) { // I want to compose the single result to the final result, so I use the SelectMany var finalResult = UrlStrings.SelectMany(link =&gt; //i have an Urlstring Collection await UrlString.DownLoadHtmlAsync() //download single result; DownLoadHtmlAsync method will Download the url's …

5
なぜこの非同期アクションがハングするのですか?
私はC#の新しい使用法呼び出すマルチティアの.Net 4.5アプリケーション持つasyncとawaitそのキーワードだけでハングアップし、私はなぜ見ることができません。 一番下には、データベースユーティリティを拡張する非同期メソッドがありますOurDBConn(基本的には、基になるオブジェクトDBConnectionとDBCommandオブジェクトのラッパー)。 public static async Task&lt;T&gt; ExecuteAsync&lt;T&gt;(this OurDBConn dataSource, Func&lt;OurDBConn, T&gt; function) { string connectionString = dataSource.ConnectionString; // Start the SQL and pass back to the caller until finished T result = await Task.Run( () =&gt; { // Copy the SQL connection so that we don't get two commands …

2
同期コードを非同期呼び出しにラップする
ASP.NETアプリケーションには、完了するまでにかなりの時間を消費するメソッドがあります。このメソッドの呼び出しは、ユーザーが提供するキャッシュの状態とパラメーターに応じて、1回のユーザー要求中に最大3回発生する可能性があります。各通話が完了するまでに約1〜2秒かかります。メソッド自体はサービスへの同期呼び出しであり、実装をオーバーライドする可能性はありません。 したがって、サービスへの同期呼び出しは次のようになります。 public OutputModel Calculate(InputModel input) { // do some stuff return Service.LongRunningCall(input); } また、メソッドの使用法は次のとおりです(注:メソッドの呼び出しは複数回発生する可能性があります)。 private void MakeRequest() { // a lot of other stuff: preparing requests, sending/processing other requests, etc. var myOutput = Calculate(myInput); // stuff again } 私はこの方法の同時作業を提供するために実装を私の側から変更しようとしました、そしてこれが私がこれまでに来たものです。 public async Task&lt;OutputModel&gt; CalculateAsync(InputModel input) { return await Task.Run(() =&gt; …

5
デッドロックを引き起こす非同期/待機の例
c#のasync/ awaitキーワードを使用した非同期プログラミングのベストプラクティスに出くわしました(c#5.0は初めてです)。 与えられたアドバイスの1つは次のとおりです。 安定性:同期コンテキストを知る ...一部の同期コンテキストは非再入可能で、シングルスレッドです。つまり、コンテキスト内で一度に実行できる作業単位は1つだけです。この例は、Windows UIスレッドまたはASP.NET要求コンテキストです。これらのシングルスレッド同期コンテキストでは、自分でデッドロックするのは簡単です。シングルスレッドコンテキストからタスクを生成し、そのコンテキストでそのタスクを待つ場合、待機中のコードがバックグラウンドタスクをブロックしている可能性があります。 public ActionResult ActionAsync() { // DEADLOCK: this blocks on the async task var data = GetDataAsync().Result; return View(data); } private async Task&lt;string&gt; GetDataAsync() { // a very simple async method var result = await MyWebService.GetDataAsync(); return result.ToString(); } 自分で分解しようとすると、メインスレッドはで新しいスレッドにスポーンしMyWebService.GetDataAsync();ますが、メインスレッドはそこで待機しているので、で結果を待機しGetDataAsync().Resultます。一方、データの準備ができていると言います。メインスレッドが継続ロジックを継続せず、継続結果の文字列を返すのはなぜGetDataAsync()ですか? 上記の例でデッドロックが発生する理由を誰かが説明してもらえますか?私は問題が何であるかについて完全に無知です...

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