1

c# とタスクにはまったく新しい... UDPclient を FromAsync(...) にラップする正しい構文を見つけようとすると、いくつかのパラメーターが不足しているようです... (.NET 4.0 で動作するはずなので、ReceiveAsync を使用できません)

public Task<byte[]> GetUDPmessageAsync()
{
    byte[] data = new byte[100];
    myUdpClient = new UdpClient(12000);

    Task<byte[]> task = Task<byte[]>.Factory.FromAsync(myUdpClient.BeginReceive, myUdpClient.EndReceive,?,?);
}
4

1 に答える 1

3

FromAsyncrefパラメータを取得するため、使用できないと思いますUdpClient.EndReceive。これにより、のすべてのオーバーロードと互換性がなくなりますFromAsync。ただし、独自の拡張メソッドを作成できます。

public static Task<byte[]> ReceiveAsync(this UdpClient client, IPEndPoint endpoint)
{
    TaskCompletionSource<byte[]> tcs = new TaskCompletionSource<byte[]>();
    AsyncCallback callback = ar => {
        try
        {
            byte[] bytes = client.EndReceive(ar, ref endpoint);
            tcs.SetResult(bytes);
        }
        catch(Exception ex)
        {
            tcs.SetException(ex);
        }
    };
    client.BeginReceive(callback, null);
    return tcs.Task;
}
于 2013-02-07T22:51:17.760 に答える