içinde kesme noktası kullanmadığı sürece boş koleksiyona geri dönüyor C# içinde bir program yazıyor, diğer programlardan gelen iletileri alıp mesajları okumak ve bazı durumlarda yanıtları hazırlayıp göndermek gerekiyor. Tek bir iletiyi işlemek için bu yöntemi yazdım ve eşzamansız olarak (await
kullanarak) veya türüne bağlı olarak eşzamanlı olarak adlandırıyorum.Beklenen yöntem,
public async void HandleMessage(Message message)
{
IEnumerable<Tuple<Message, ulong>> responses;
try
{
if (!_communicateTypesToHandleSync.Contains(message.GetType()))
{
responses = await Task.Run(() => _requestHandler.HandleRequest(message));
}
else
{
responses = _requestHandler.HandleRequest(message);
}
foreach (var response in responses)
{
CSMessageHandler.AddMessageToSend(response.Item1, response.Item2);
}
}
catch (Exception ex)
{
_logger.Error(ex, "Error while handling message");
}
}
sorun bekliyor kullanılarak HandleRequest
arayarak hep (bir koşullu kesme ile işaretli) boş bir koleksiyon dönmek gibi görünüyor olmasıdır. Hata ayıklamaya çalıştım ve sonunda ne olup bittiğini öğrendiğimde, yalnızca koleksiyon boş değilse duracak olan HandleRequest
'un sonunda bir kesme noktası belirledim. Bu kesme noktası kod yürütme üzerinde durdu ve HandleMessage
içinde bile HandleRequest
'dan çıktığında responses
boş bırakmadım.
Senkron bir yöntem beklemek kötü bir kod uygulamasıdır; Ayrıca bu bağlamda Task.Run kullanmayı bırakın. [Bu] (https://channel9.msdn.com/Series/Three-Essential-Tips-for-Async/Async-Library-Methods-Shouldn-t-Lie) mükemmel videoya bakın. –
@JeroenHeier bunu birkaç cümlede özetleyelim. 16 dakika benim için çok uzun ... – Eser
Bu hiç mantıklı değil. Bu ne tür bir uygulama? Arama kodu nedir? –