Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C#: Task を用いるようにした #121

Closed
wants to merge 1 commit into from
Closed

C#: Task を用いるようにした #121

wants to merge 1 commit into from

Conversation

0918nobita
Copy link
Contributor

@0918nobita 0918nobita commented Jul 10, 2020

C# において非同期処理を行う際に用いられる Task で、then then then 世を実現しました。

具体的には、

  • 既存の RADWIMPS クラスに Task 型のプライベートフィールド task を追加し、(すでに完了した処理を表す) Task.CompletedTask で初期化
  • then メソッドで、task フィールドに継続タスクを連結 (この時点では継続は実行されない) したうえで自分の this を返すようにした
  • メソッドで、task フィールドに継続タスクを連結したうえですべての継続を実行するようにした (これを呼び出したタイミングで「前前前世」が出力される)

のような変更を加えています。

@0918nobita 0918nobita requested a review from a team as a code owner July 10, 2020 05:42
RADWIMPS.cs Outdated Show resolved Hide resolved
RADWIMPS.cs Outdated Show resolved Hide resolved
RADWIMPS.cs Outdated Show resolved Hide resolved
RADWIMPS.cs Outdated Show resolved Hide resolved
@siketyan
Copy link
Member

siketyan commented Jul 10, 2020

@0918nobita CI が落ちてるのはトークンの問題なので(PR Author のトークンでは当然リポジトリの操作ができない),気にしないでください 🙏
この問題については #122 で修正済みですが PR を作り直さないと反映されないので,そのままで大丈夫です!

@0918nobita
Copy link
Contributor Author

0918nobita commented Jul 10, 2020

@siketyan @kawaemon この (エントリポイントで Task を返却するようにする) 修正を加えると、最新版の mcs (mono 付属の C# コンパイラ) では C# 7.1 の言語機能「async main」がサポートされていないためコンパイルに失敗するようになりました。
OS は Ubuntu 20.04 LTS です。

$ mcs --version
Mono C# compiler version 6.8.0.105

$ mcs RADWIMPS.cs
RADWIMPS.cs(25,28): warning CS0028: `RADWIMPS.Program.Main(string[])' has the wrong signature to be an entry point
error CS5001: Program `RADWIMPS.exe' does not contain a static `Main' method suitable for an entry point
Compilation failed: 1 error(s), 1 warnings

参考 Issue:mono/mono#6854

@siketyan
Copy link
Member

@0918nobita .NET Core 使いましょう……

@siketyan
Copy link
Member

このプロジェクト全体として最新の言語機能を重視するのか互換性を重視するのかというのは重要な議論点だと思うのでこの機会に決めておいたほうがよさそうです
@approvers/all

@0918nobita
Copy link
Contributor Author

0918nobita commented Jul 10, 2020

まぁこのプロジェクトで互換性云々を重視してもあんまり意味がない気がするので、今回は .NET Core を想定する案に賛成です。この際 RADWIMPS.csproj を追加してちゃんと言語バージョン等を指定したほうがいいかもしれません

@siketyan
Copy link
Member

@0918nobita 言語バージョンの指定は賛成ですが .csproj を Git 管理下に置くほどではないかな,と思いますね…
いくつかの言語ではすでにされていますがファイルの先頭にコメントで書く程度でいいかもしれません

@0918nobita
Copy link
Contributor Author

0918nobita commented Jul 10, 2020

@siketyan .csproj のない状態でクローンしてきて各自でなんとか動かしてくれ、というのはコメントに方法が追記されていたとしてもかなり面倒で、この話のように開発/動作環境に関する混乱を招く原因にもなり得ます。
#102 (comment) でも提案しているように、C# (または CSharp ?) ディレクトリを作成してそのなかに .cs, .csproj ファイルを入れてしまうのが、一番親切でそこまで面倒ではなくて良いと思います。

@siketyan
Copy link
Member

@0918nobita たしかにそうですね…
私だけでは決めかねるので他のメンバーと相談します 🙇‍♂️
@approvers/all

@mirror-kt
Copy link
Contributor

このPRの本筋から離れるため #123 にて検討します

@0918nobita 0918nobita requested a review from siketyan July 13, 2020 09:37
@0918nobita
Copy link
Contributor Author

ごちゃごちゃしてきたのでディレクトリ構造に関する議論が片付いてから PR 投げ直します

@0918nobita 0918nobita closed this Jul 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants