0

新しい await/async コンストラクトを実装して、かつて書いた非同期 TCP クラスを書き直そうとしています。

これまでのところ、

    public async void Send(byte[] data)
    {
        await SendAsync(data);
    }

    private Task SendAsync(byte[] data)
    {
        var stream = _tcpClient.GetStream();
        return new Task(()=>stream.Write(data, 0, data.Length));
    }

しかし、何か変なにおいがします。これは正しい方法ですか?

編集:
たとえば、私は同じことを達成することができました

    public async void Send(byte[] data)
    {
        await SendAsync(data);
        var stream = _tcpClient.GetStream();
        await Task.Factory.StartNew(()=>stream.Write(data, 0, data.Length));
    }

または Task.Run(..) を使用

どちらが好ましいですか?

4

1 に答える 1

3

代わりにStream.WriteAsync()メソッドを使用して、非同期処理の作業を基本クラス ライブラリに移します。上記の例に含まれていないコードの ReadAsync もあります。

于 2012-09-04T08:32:49.580 に答える