异步并等待Windows Phone 8上的数据库操作

时间:2013-05-28 04:04:40

标签: c# windows-phone-8 windows-phone async-await local-database

我正在尝试搜索一些关于在Windows Phone 8上使用async,await和Tasks与本地数据库的最佳实践的文章,但我只能找到使用WebClient或HttpClient的示例。

我想知道我想要做的是最好的方法,还是有更好的方法。 我的viewmodelbase中有一个方法,如下所示:

protected virtual Task<T> ExecuteDataAsync<T>(ExecuteDataAsyncAction<T> action)
{
    var task = new Task<T>(() => { return action(); });
    task.Start();
    return task;
}

然后,在我的savedata中,由ICommand调用,我有类似的东西:

private async void SaveData()
{
    if (!ValidateBeforeSave() || IsBusy)
        return;

    IsBusy = true;

    using (var db = new AppDataContext())
    {
        if (db.Sources.Any(o => o.Name == SourceTitle))
        {
                messageBoxService.Show(AppResources.MSG_ThereIsSourceSameTitle);
                return;
        }

        //the method in the viewModelBase with some operation
        var source = await ExecuteDataAsync<Source>(() => 
        {
            var source = db.Source.FirstOrDefault();
            return GetSource(source, false);
        });

        db.Sources.InsertOnSubmit(source);

        //the method in the viewModelBase with some operation
        var source = await ExecuteDataAsync<Source>(() => 
        {
            db.SubmitChanges();
        });
    }

    IsBusy = false;
}

我不确定这是否是不涉及WebClient的操作的最佳方法。 另外,我可以在我的AppDataContext或类似的东西中编写异步方法,但我不知道它是否会起作用......

您如何建议我使用不依赖网络的数据库操作和其他处理器密集型操作?

0 个答案:

没有答案