知りたいこと
C#のasyncの機能ですが、普通のasync宣言されていない関数は非同期処理することはできないのでしょうか。例えば、下記コードにおいては、クラスAについて非同期を実装したいのですが、調べたところによるとどうにもA, B, C, DすべてのRunについてasyncとawaitをつけなければいけないように見受けられます。しかし、どうにも理にかなっていないように思います。C#で用意されているライブラリのほとんどは同期処理を前提としているはずで、非同期処理を行いたければそれらを使用できないのでしょうか。なにか私が見落としていることがありましたら教えてください。
C#
1class Program 2{ 3 static void Main(string[] args) 4 { 5 A.Run(); 6 } 7} 8public static A 9{ 10 public void Run() 11 { 12 B.Run(); 13 } 14} 15public static B 16{ 17 public void Run() 18 { 19 C.Run(); 20 } 21} 22public static C 23{ 24 public void Run() 25 { 26 D.Run(); 27 } 28} 29......
非同期メソッドの中から同期メソッドを呼び出すことはできます。
何を聞いているのかよくわかりません。
例えば、Aにasyncをつけてawait A.Run();とすると、A.Runの中にもawaitをつけることを要求されます。A.Runの処理はB.Runですので、await B.Run();とする必要が出てきます。こうすると、A~ZまでクラスがあるとしてZまで書き直す必要に迫られます。これの対処法をお伺いしています。
A.Run とか B.Run って何ですか? あなたの言う同期処理と非同期処理の定義は何ですか? async / await とあなたの言う「非同期処理」はどう関係すると思っていますか? 「どうにも理にかなっていないように思います」とありますが何が理にかなってないのですか? 「C#で用意されているライブラリのほとんどは同期処理を前提としている」とは何を見てそう言ってるのが具体例を挙げられますか? 少し勉強してから質問しないと話が通じないと思いますけど・・・
SurferOnWwwさん、失礼しました。非同期処理と同期処理で関数を全て分けるのはおかしいと思い、その反例として同期処理を前提としているとお話ししました。そもそも、非同期処理と同期処理の処理が分かれていないのであればこの話はつじつまがあいませんので、誤解を招きました。平たく言いますと、「用意されている普通の関数を、非同期処理する方法」をお伺いしています。よろしければ、ご回答いただけますでしょうか。
↓ これを読むと良いかもしれません。
async および await を使用した非同期プログラミング
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/
色々いじってたらできました。ありがとうございます
何ができたのですか? あなたの質問のコードを見る限り何もできないと思いますけど。何をどのようにできたのか、回答欄に具体的に、あくまで具体的に、ここに書いてないこと以外は知り得ない第三者が読んで分かるように文書化できますか?
現状ですと質問の意義も分からず回答もつかず無価値なものとなり、放置しておくと低評価が重なることが予想されます。質問は取り下げ(削除依頼)できますので、何らかの対応をすることをお勧めします。
[質問・回答を消去したい] https://teratail.com/help#delete-question
回答2件
あなたの回答
tips
プレビュー