使用奥尔良内部谷物的结果
Using result from inner grain in Orleans
我想了解 Grains 在奥尔良的运作方式。当我尝试在外部 Grain 中使用内部 Grain 的结果时,我的程序会停止。
inner grain 会不会被 outer grain 的上下文阻塞,所以我永远无法从 inner grain 得到结果?
public class OuterGrain : Grain, IOuterGrain
{
public Task<string> GetFormattedTime()
{
var innerGrain = GrainFactory.GetGrain<IInnerGrain>(1);
var innerGrainTask = innerGrain.GetCurrentTime();
return Task.FromResult(innerGrainTask.Result.ToString("yy-MM-dd"));
}
}
public class InnerGrain : Grain, IInnerGrain
{
public Task<DateTime> GetCurrentTime()
{
return Task.FromResult(DateTime.Now);
}
}
使用正确的 async/await 模式,永远不要在异步方法中使用阻塞 .Result
或 .Wait()
方法(即 returns Task
或 Task<>
)
public class OuterGrain : Grain, IOuterGrain
{
public async Task<string> GetFormattedTime()
{
var innerGrain = GrainFactory.GetGrain<IInnerGrain>(1);
var innerGrainResult = await innerGrain.GetCurrentTime();
return innerGrainResult.ToString("yy-MM-dd");
}
}
public class InnerGrain : Grain, IInnerGrain
{
public Task<DateTime> GetCurrentTime()
{
return Task.FromResult(DateTime.Now);
}
}
我想了解 Grains 在奥尔良的运作方式。当我尝试在外部 Grain 中使用内部 Grain 的结果时,我的程序会停止。
inner grain 会不会被 outer grain 的上下文阻塞,所以我永远无法从 inner grain 得到结果?
public class OuterGrain : Grain, IOuterGrain
{
public Task<string> GetFormattedTime()
{
var innerGrain = GrainFactory.GetGrain<IInnerGrain>(1);
var innerGrainTask = innerGrain.GetCurrentTime();
return Task.FromResult(innerGrainTask.Result.ToString("yy-MM-dd"));
}
}
public class InnerGrain : Grain, IInnerGrain
{
public Task<DateTime> GetCurrentTime()
{
return Task.FromResult(DateTime.Now);
}
}
使用正确的 async/await 模式,永远不要在异步方法中使用阻塞 .Result
或 .Wait()
方法(即 returns Task
或 Task<>
)
public class OuterGrain : Grain, IOuterGrain
{
public async Task<string> GetFormattedTime()
{
var innerGrain = GrainFactory.GetGrain<IInnerGrain>(1);
var innerGrainResult = await innerGrain.GetCurrentTime();
return innerGrainResult.ToString("yy-MM-dd");
}
}
public class InnerGrain : Grain, IInnerGrain
{
public Task<DateTime> GetCurrentTime()
{
return Task.FromResult(DateTime.Now);
}
}