如何为Design Time服务实现异步方法

时间:2014-10-16 00:12:52

标签: c# wcf asynchronous

我有一个IMyService接口,它有这个方法:

public Task<IList<int>> GetNumbers();

我有一个IMyService的实现,它从Server获取数字列表。因此它是一种异步方法。

我的问题是我需要为DesignTimeService做同样的事情。所以我做了:

public Task<IList<int>> GetNumbers()
{
    var lists = new ObservableCollection<int>();
    System.Threading.Thread.Sleep(2000);
    for (int i = 0; i < 5; i++)
        lists.Add(i);

    return lists;
}

但它不会编译。如何退回Task<IList<int>>?如果我正在模拟我在本地生成的数字列表?

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您愿意,可以返回Task.FromResult(lists)

我个人试图通过async途径

答案 1 :(得分:0)

您可以在任务中包含所需的逻辑并返回

public Task<IList<int>> GetNumbers()
{
    return Task.Factory.StartNew<IList<int>>(() => 
    {
        var lists = new ObservableCollection<int>();
        System.Threading.Thread.Sleep(2000);
        for (int i = 0; i < 5; i++)
            lists.Add(i);

        return lists;
    });
}

或使用async / await

public async Task<IList<int>> GetNumbers() 
{
    var lists = new ObservableCollection<int>();
    await Task.Delay(2000);
    for (int i = 0; i < 5; i++)
        lists.Add(i);

    return lists;
}