首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UdpClient语法FromAsync

UdpClient语法FromAsync
EN

Stack Overflow用户
提问于 2013-02-08 06:36:22
回答 1查看 410关注 0票数 1

对c#和任务非常陌生……试图找到正确的语法来将UDPclient封装到FromAsync(...)中,我似乎遗漏了一些参数...(不能使用ReceiveAsync,因为它应该适用于.NET 4.0)

代码语言:javascript
复制
public Task<byte[]> GetUDPmessageAsync()
{
    byte[] data = new byte[100];
    myUdpClient = new UdpClient(12000);

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

回答 1

Stack Overflow用户

发布于 2013-02-08 06:51:18

我不认为你可以使用FromAsync,因为UdpClient.EndReceive接受了一个ref参数,这使得它与FromAsync的所有重载都不兼容。不过,您可以创建自己的扩展方法:

代码语言:javascript
复制
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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14762375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档