gpt4 book ai didi

c# - 在回调中使用 await

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:25 26 4
gpt4 key购买 nike

我在回调中通过 websocket 发送多条消息。问题是,如果一个发送未完成而另一个发送已启动,则该功能超出异常。由于 socket.SendAsync() 是异步的,我可以使用 await 等待它。一旦我使用 await,我就必须将我的 lambda 表达式声明为 async。但是一旦我这样做,回调就不会被调用。有谁知道为什么或对此有解决方案/解决方法?

示例代码:

queue.QueueCompleted += async (s, eA) =>
{
z = dr.Start + 1;
while (z < (dr.Start + 1 + dr.Limit))
{
string path = AppDomain.CurrentDomain.BaseDirectory + @"DCM\" + dr.Code.Replace('.', '_') + @"\IMAGE" + z.ToString() + ".jpg";
Image image = null;
image = Image.FromFile(path);
ImageConverter ic = new ImageConverter();
byte[] buffer = (byte[])ic.ConvertTo(image, typeof(byte[]));
try
{
if (socket != null && socket.State == WebSocketState.Open)
{
Debug.WriteLine("REACHED");
await socket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Binary, true, CancellationToken.None);
image.Dispose();
}
}
catch (Exception e)
{
image.Dispose();
break;
}
z++;
}
};

回调是一个简单的EventHandler,调用方式类似于if(QueueCompleted != null) QueueCompleted(e, null);

最佳答案

可能不是最有效的,但这是我用于内联异步代码的模式:

queue.QueueCompleted += (s, eA) =>
{
Task.Run(async ()=>{
//blah
});
};

关于c# - 在回调中使用 await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com