ufcpp / UfcppSample

http://ufcpp.net/ 向けのサンプル
Apache License 2.0
136 stars 39 forks source link

await foreach #253

Closed ufcpp closed 5 years ago

ufcpp commented 5 years ago

非同期ストリームの話は分けて issue 立てる。

await using の次に。 というか、foreach は using 的な挙動を含んでて、await foreach も await using 的な挙動を含んでる。

ufcpp commented 5 years ago

as で動的に IAsyncDisposable の存在を確認したりはしないらしい。 以下のコードだと DisposeAsync は呼ばれない。

using System;
using System.Threading.Tasks;

class A
{
    public A GetAsyncEnumerator() => this;
    public int Current => 0;
    public ValueTask<bool> MoveNextAsync() => default;
}

class B : A, IAsyncDisposable
{
    public ValueTask DisposeAsync()
    {
        Console.WriteLine("ここは絶対に呼ばれないみたい");
        return default;
    }
}

public class Program
{
    public static async Task Main()
    {
        await foreach (var x in new B()) ;
    }
}

という話まで書くべき?

ufcpp commented 5 years ago

必要なのは一通り書いたはず。 https://ufcpp.net/study/csharp/async/asyncstream/#await-foreach

https://ufcpp.net/study/csharp/st_loop.html からのリンクはなくていいや。

WithCancellation の話は非同期イテレーターの方で書く。