50909


参考書のコードなのですがこの`await`と`async`の使い方について混乱しています。  
`SampleAsync()`の`async`と`await`の指定で何を処理しているのかを知りたいです。  
非同期処理を同期処理のように書くことができると参考書にあるのですが、もっと解説が欲しいので質問しました。  
１、質問なのですが、このコードは非同期処理のようで同期処理のような実行の仕方をしていると思われます。なぜなら結局処理を待たないといけないので...?

2,`return await Task.Run()`では`await`型ですか。`Task t =` なので`Task`型でしょうか？

[code]

    using System;
    using System.Threading.Tasks;
    using IronPython.Hosting;
    using Microsoft.Scripting.Hosting;
    
    
    class Program
    {
        public static  async Task<int> SampleAsync()
        {
            return await Task.Run(new Func<int>( () =>
            {
                int i = 0;
                for (; i < int.MaxValue; i++)
                {
                    //Console.WriteLine(i);
                };
    
                return i;
    
            } ) );
        }
    
        public static void Main()
        {
    
            Task<int> t = SampleAsync();
            t.Wait();
            Console.WriteLine("完了:{0}", t.Result);   
    
    
            Console.ReadKey();
        }
    }
    
[/code]


CC BY-SA 4.0
2018-12-04T14:10:21.850
50904
2018-12-07T16:15:40.660
2018-12-07T16:15:40.660
76
question
c#
非同期処理の初歩、awaitとasyncで処理内容をもっと知りたい。


  1. [タプル分解の利点が知りたい](https://ja.stackoverflow.com/q/50611/4236)でもそうでしたが、説明のための説明であり、意味は特にないコードに思われます。今回も違和感を覚えられているようで、その感覚は正しいです。別スレッドで実行開始した処理を`await`を使って完了待ちしているだけであり、非同期処理の恩恵は何一つ受けていません。
  2. そもそも`await`型という概念が存在しません。[`await`キーワード](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/await)は完了待ちをする機能です。


CC BY-SA 4.0
2018-12-04T21:41:33.553
50909
2018-12-04T21:41:33.553
4236
50904
answer