由于某些原因,盡管這個問題在我的搜索中出現了很多,但我似乎找不到一個實際的答案。也許我只是錯用了代表,我不確定。如果這是一個X-Y問題,我很樂意提供其他的處理方法。
假設我有這樣的情況:
public class SomeLibrary
{
public delegate void OnSomethingHappened(EventInfo eventInfo) 。
public OnSomethingHappened onSomethingHappened;
public void SomeMethod()
{
// ...
// 在這里發生了一些事情,所以我們最好觸發事件。
onSomethingHappened?.Invoke(eventInfo)。
// ...
}
}
public class MyCode
{
public void SomeInitialisationMethod()
{
SomeLibrary someLibrary = new SomeLibrary()。
someLibrary.onSomethingHappened = SomeEventHandler。
}
private void SomeEventHandler(EventInfo eventInfo)。
{
DoSyncProcessing(eventInfo)。
}
}
這應該都很好(除了愚蠢的錯別字之外)。
現在想象一下我的常規同步DoSyncProcessing函式突然要變成非同步的,就像在這個神奇的非功能代碼中:
public class SomeLibrary
{
public async delegate任務OnSomethingHappened(EventInfo eventInfo) 。// <<< IDK我在這里做什么!
public OnSomethingHappened onSomethingHappened;
public void SomeMethod()
{
// ...
// 這里發生了一些事情,所以我們最好觸發事件。
await onSomethingHappened?.Invoke(eventInfo); // <<< IDK what I'm doing here either!
// ...。
}
}
public class MyCode
{
public void SomeInitialisationMethod()
{
SomeLibrary someLibrary = new SomeLibrary()。
someLibrary.onSomethingHappened = SomeEventHandler。
}
private async Task SomeEventHandler(EventInfo eventInfo)
{
await DoAsyncProcessing(eventInfo)。
}
}
我如何處理?正確的做法是什么?
uj5u.com熱心網友回復:
async修改器影響的是方法的實作,而不是簽名。所以要這樣改:
public async delegate Task OnSomethingHappened(EventInfo eventInfo) 。
對此:
public delegate任務OnSomethingHappened(EventInfo eventInfo) 。
然后你的代碼就可以作業了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318042.html
標籤:
