Clo*_*kex 5 c# delegates asynchronous async-await
出于某种原因,尽管这个问题在我的谷歌搜索中出现了很多,但我似乎找不到真正的答案。也许我只是错误地使用了代表,我不确定。如果这是一个 XY 问题,我很高兴有其他方法来处理这个问题。
假设我有这个:
public class SomeLibrary
{
public delegate void OnSomethingHappened(EventInfo eventInfo);
public OnSomethingHappened onSomethingHappened;
public void SomeMethod()
{
// ...
// Something happened here, so we'd better trigger the event
onSomethingHappened?.Invoke(eventInfo);
// ...
}
}
public class MyCode
{
public void SomeInitialisationMethod()
{
SomeLibrary someLibrary = new SomeLibrary();
someLibrary.onSomethingHappened += SomeEventHandler;
}
private void SomeEventHandler(EventInfo eventInfo)
{
DoSyncProcessing(eventInfo);
}
}
Run Code Online (Sandbox Code Playgroud)
这应该没问题(除非有愚蠢的拼写错误)。
现在想象一下我的常规同步DoSyncProcessing
函数突然必须变得异步,就像这个神奇的非功能代码一样:
public class SomeLibrary
{
public async delegate Task OnSomethingHappened(EventInfo eventInfo); // <<< IDK what I'm doing here!
public OnSomethingHappened onSomethingHappened;
public void SomeMethod()
{
// ...
// Something happened here, so we'd better trigger the event
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何处理?这样做的正确方法是什么?
Joh*_*ica 12
修饰符async
影响方法的实现,而不是签名。所以改变这个:
public async delegate Task OnSomethingHappened(EventInfo eventInfo);
Run Code Online (Sandbox Code Playgroud)
对此:
public delegate Task OnSomethingHappened(EventInfo eventInfo);
Run Code Online (Sandbox Code Playgroud)
你的代码将会工作。
归档时间: |
|
查看次数: |
2780 次 |
最近记录: |