2020年10月05日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 934 count

【入門級】非同期のハロー・ワールド

Written By: 川俣 晶連絡先

ハロー・ワールドを非同期にできるか? §

 できます。

 そのための問題は2点あります。

  • Mainメソッドを非同期にできるか?
  • Console.WriteLineの非同期版がない

 まずMainメソッドはC#7.1から非同期可になっています。しかし、単にasyncを付ければ良いわけではありません。戻り値の型をvoidからTaskに変更しなければなりません。ここをクリアできれば非同期にできます。

 次に、Console.WriteLineの非同期版がない問題ですが、確かにConsoleクラスにWriteLineAsyncメソッドはありません。ところが、ConsoleクラスのOutプロパティを経由して出力ライターを取得すると、ここにはWriteLineAsyncメソッドがあります。結局同じところに出力するので、これを使っても結果は同じです。

 つまりステップは以下の3点です。

  • Mainメソッドにasyncを付ける
  • Mainメソッドの戻り値をvoidからTaskに変更する (必要ならusing System.Threading.Tasks;も追加する)
  • Console.WriteLineをawait Console.Out.WriteLineAsyncに変更する

罠の数々 §

  • static async void Main()はC#の文法としては間違っていない。しかし、C#のスタートアップメソッドとしては認識されないので、実行できない。文法エラーが起きていないからと言って安心しないようにしよう

参考リンク §

Console クラス

Console.Out プロパティ

TextWriter.WriteLineAsync メソッド

 Console クラスから直接使えない様々な機能をConsole.Out プロパティを経由すると使用できる。WriteLineAsync メソッドはその一部に過ぎない。どんな機能が使用できるか上記リンクから辿って調べてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

async §

using System;

using System.Threading.Tasks;

class Program

{

    static async Task Main()

    {

        await Console.Out.WriteLineAsync("Hello World!");

    }

}

実行結果

Hello World!

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
10月
06日
【入門級】AからZまでの文字列を生成する
3days 0 count
total 4273 count
【C# コーディング How To】の前のコンテンツ
2020年
10月
04日
【入門級】配列を逆順で取り出す6つの方法
3days 0 count
total 1675 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201005085337
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.