首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异步方法未运行后执行

异步方法未运行后执行
EN

Stack Overflow用户
提问于 2016-04-13 22:12:51
回答 2查看 114关注 0票数 0

我的ViewModel中有这个方法:

代码语言:javascript
复制
private async void InicializarModulo(IModuloNeotek modulo)
{
    var t = _service.InitializeModuloAsync(DataProvider.NombreInstanciaSqlServer,
            modulo, Empresa.NombreEmpresa);
    ServiceResult<IModuloNeotek> sResult = await t;

    if (sResult.HasErrors)// this never runs
        MessageBox.Show("Error"); 
}

这是我的服务电话:

代码语言:javascript
复制
public async Task<ServiceResult<IModuloNeotek>> InitializeModuloAsync(string dataSource,
    IModuloNeotek modulo, string nombreEmpresa)
{
    return await Task.Run(() => InitializeModulo(dataSource, modulo, nombreEmpresa));
}

编辑:

代码语言:javascript
复制
public ServiceResult<IModuloNeotek> InitializeModulo(string dataSource, IModuloNeotek modulo, string nombreEmpresa)
{
    ServiceResult<IModuloNeotek> sResult;
    if (DatabaseExists(dataSource, Strings.GetDbName(nombreEmpresa, modulo.NombreModulo)))
        {
            sResult = new ServiceResult<IModuloNeotek>(null);
            sResult.Error =
                string.Format(
                    "El modulo {0} ya esta inicializado para esta empresa.",
                    modulo.NombreModulo);
            return sResult;
        }
        SqlQueryResult qResult = new SqlQueryResult();
        string connString = GenerateConnectionString(dataSource);

        switch (modulo.NombreModulo)
        {
            case "Contabilidad":
                qResult = ExecuteScript(connString, GetScriptStream(TipoModulo.Contabilidad, nombreEmpresa));
                if (qResult.Result)
                {
                    string query =
                        string.Format("INSERT INTO Modulos (NombreModulo, Inicializado, EmpresaId)" +
                                      "VALUES ('{0}', 'true', (SELECT IdEmpresa FROM Empresas WHERE NombreEmpresa=" +
                                      "'{1}')) ", modulo.NombreModulo, nombreEmpresa);

                    qResult = ExeCuteQuery(query, dataSource, Resources.MaterDbName);
                    if (qResult.Result)
                    {
                        sResult = new ServiceResult<IModuloNeotek>(modulo);
                        return sResult;
                    }
                }
                break;
            case "Proveedores":
                break;
            case "Produccion":
                break;
        }
        sResult = new ServiceResult<IModuloNeotek>(null);
        sResult.Error = qResult.Error;
        sResult.InnerError = qResult.InnerError;
        return sResult;
}

那么,为什么不继续执行呢?我尝试了所有的方法,从服务返回一个任务并在ViewModel中等待,没有返回Task.Run,只是任务,我不知道该做什么,有什么线索吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-04-13 22:27:55

尝试更改:

代码语言:javascript
复制
private async void InicializarModulo(IModuloNeotek modulo)

至:

代码语言:javascript
复制
private async Task InicializarModulo(IModuloNeotek modulo)
票数 0
EN

Stack Overflow用户

发布于 2016-04-13 23:16:02

您的服务呼叫不正确。它本身就是awaiting

更新为not await

代码语言:javascript
复制
private async void InicializarModulo(IModuloNeotek modulo)
{
    var t = _service.InitializeModuloAsync(DataProvider.NombreInstanciaSqlServer, modulo, Empresa.NombreEmpresa);
    ServiceResult<IModuloNeotek> sResult = await t;

    if (sResult.HasErrors)// this never runs
        MessageBox.Show("Error"); 
}

public Task<ServiceResult<IModuloNeotek>> InitializeModuloAsync(string dataSource, IModuloNeotek modulo, string nombreEmpresa)
{
    return Task.Run(() => InitializeModulo(dataSource, modulo, nombreEmpresa));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36601100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档