0

我正在尝试重写我曾经编写的异步 TCP 类,以实现新的 await/async 构造。

到目前为止我有

    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 回答