コールバック内の websocket を介していくつかのメッセージを送信しています。問題は、1 つの送信が完了せずに別の送信が開始された場合、関数が例外を超えて超過することです。is async のためsocket.SendAsync()
、 でそれを待つことができましたawait
。使用するとすぐにawait
、ラムダ式を として宣言する必要があり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);