【发布时间】:2018-06-08 23:44:04
【问题描述】:
请看下面的同步代码:
public class PersonHandler : IRequestHandler<Person, Person>
{
public Task<Person> Handle(Person request, CancellationToken cancellationToken)
{
request.ID = 1;
request.Name = "Brian";
request.Age = 53;
return Task.FromResult(request);
}
}
以及下面的调用代码:
var response2 = mediator.Send(new Person());
这按预期工作。请看下面的异步代码:
public class PersonHandlerAsync : IRequestHandler<Person, Person>
{
public async Task<Person> Handle(Person request, CancellationToken cancellationToken)
{
request.ID = 1;
request.Name = "Brian";
request.Age = 53;
var result = await Task.FromResult(request);
await Task.Delay(30000);
return result;
}
}
以及下面的调用代码:
var response = Task.Run(() => mediator.Send(new Person()));
此代码按预期工作。
同一个类(Person)是否可以有两个处理程序,即一个同步另一个异步?如果我将两个处理程序类都放在我的代码中,那么 mediator.send 行,即 mediator.Send(new Person()); 和 Task.Run(() => mediator.Send(new Person())); 都会调用同步方法。
如何告诉 mediatr,使用哪个处理程序类?即同步调用的 PersonHandler 和异步调用的 PersonHandlerAsync。
【问题讨论】:
-
您使用的是什么版本的 Mediatr?:
-
@Alex,4.0.1。它似乎没有此处文档中所述的 IAsyncRequestHandler:github.com/jbogard/MediatR/wiki(页面底部)。
-
@Alex,你有什么建议吗?谢谢。