我的問題很簡單,如果我使用 Caliburn Micro 的事件聚合器,并實作介面“IHandle”,那么就會創建一個名為“HandleAsync(MyEvent message, CancelleationToken token)”的方法。
我的問題是,通常這些方法不是異步的,不需要用“async”標記,也不需要回傳一個 Task,因此最后真的不應該有“Async”,因為它們不是異步方法,并引發了Visual Studio 中的警告。
這不會給我帶來任何技術問題,只是為了遵守 Caliburn Micro 的事件聚合器訂閱方法介面而錯誤地命名方法只是令人惱火。
簡單的問題是如何從方法名稱的末尾洗掉 Async,或者以其他方式擺脫這些警告?
謝謝
加里
uj5u.com熱心網友回復:
不幸的是,這EventAggregator在 Caliburn Micro 中的當前實作中是不可能的。
如果您要檢查github 存盤庫中 EventAggregator 的實作,您會注意到它正在搜索具有特定名稱的方法。
var interfaces = handler.GetType().GetTypeInfo().ImplementedInterfaces
.Where(x => x.GetTypeInfo().IsGenericType && x.GetGenericTypeDefinition() == typeof(IHandle<>));
foreach (var @interface in interfaces)
{
var type = @interface.GetTypeInfo().GenericTypeArguments[0];
var method = @interface.GetRuntimeMethod("HandleAsync", new[] { type, typeof(CancellationToken) });
if (method != null)
{
_supportedHandlers[type] = method;
}
}
一種替代方法是實作您自己的版本IEventAggregator并引入兩個介面IHandle<T>并IHandleWithTask<T>表示同步和異步變體。
uj5u.com熱心網友回復:
您應該能夠抑制源代碼中的警告。
在錯誤串列中右鍵單擊它,然后根據要插入#pragma指令的位置選擇 Suppress->In Source 或 Suppress->In Suppression File 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315362.html
標籤:C# 小白 视觉工作室 caliburn.micro
