使用奥尔良内部谷物的结果

时间:2016-04-06 19:44:26

标签: c# orleans

我想了解Grains在奥尔良的运作方式。当我尝试使用外部颗粒中的内部颗粒的结果时,我的程序将停止。

内颗粒是否会受到外层颗粒的影响,所以我永远无法从内颗粒中获得结果?

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);
    }
}

1 个答案:

答案 0 :(得分:4)

使用corrent async / await模式,永远不要在异步方法中使用阻塞.Result.Wait()方法(返回TaskTask<>

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);
    }
}