自定义异步/等待

时间:2012-09-04 08:14:18

标签: c#

我正在尝试重新编写一个异步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(..)

哪个更好?

1 个答案:

答案 0 :(得分:3)

使用Stream.WriteAsync()方法,将处理异步性的工作转移到基类库。还有一个ReadAsync代码,不包含在上面的例子中。