C # 비동기 메서드가 예상대로 호출자에게 반환되지 않습니다.

호날두 레 모스

계단식으로 연결된 일련의 비동기 함수가 있지만 마지막 실행이 완료되면 이전 값으로 값을 반환하지 않습니다.

이것이 내 첫 번째 호출이 실행되는 곳입니다. 이것은 WebAPI 기능이며 항상 끝납니다.

    [HttpGet]
    [Route("integracao/iniciar")]
    public IHttpActionResult FazerIntegrar()
    {
        try
        {
            Integrar objIntegrar = new Integrar();

            return Ok(objIntegrar.Integra());
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }

    }

그래서 내 라이브러리에있는 함수가 호출됩니다. 내 기능 내에서 한 번만 실행할 수 있습니다. 루프를 계속하기 위해 흐름이 다시 시작되지 않습니다.

public async Task<bool> Integra()
    {
        var files = Directory.GetFiles(@"C:\inetpub\wwwroot\Atendup\Arquivos\Backup\");

        bool retorno = false;

        if (files != null)
        {
            foreach (var item in files)
            {
                retorno = false;

                using (StreamReader sr = new StreamReader(item))
                {
                    if (sr != null)
                    {
                        while (sr.EndOfStream == false)
                        {
                            string line = await sr.ReadLineAsync();

                            string[] grupo = line.Split(new[] { "#*#" }, StringSplitOptions.None);

                            procData objProc = new procData();

                            objProc.proc = grupo[0];

                            objProc.name = JsonConvert.DeserializeObject<List<string>>(grupo[1]);
                            objProc.valor = JsonConvert.DeserializeObject<List<object>>(grupo[2]);
                            objProc.tipo = JsonConvert.DeserializeObject<List<Type>>(grupo[3]);

                            _context = new IntegrarRepository("online_pedidopizza");

                            retorno = await _context.IntegrarAsync(objProc);

                            //retorno = await _context.IntegrarAsync(objProc);
                        }
                    }
                }

                if (retorno == true)
                {
                    await DeleteAsync(item);
                }
            }
        }

        return retorno;
    }

저장소를 조정하는 세 번째 기능이 있습니다.

        public async Task<bool> IntegrarAsync(procData objProc)
    {
        return await this.SendIntegrarAsync(objProc);
    }

마지막으로 데이터베이스와의 통신, 모든 코드가 올바르게 실행됩니다. 디버깅은이 네 번째 기능의 끝까지 도달 할 수 있지만 디버그가 중지되고 처음으로 돌아 가지 않습니다.

protected async Task<bool> SendIntegrarAsync(procData parametro)
    {
        bool retorno = false;

        using (SqlConnection conn = new SqlConnection(""))
        {
            using (SqlCommand cmd = new SqlCommand(parametro.proc, conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                if (parametro != null)
                {
                    for (int i = 0; i < parametro.name.Count; i++)
                    {
                        AdicionaParametro(cmd, parametro.name[i], parametro.valor[i], parametro.tipo[i]);
                    }
                }

                try
                {
                    cmd.CommandTimeout = 300;

                    await conn.OpenAsync().ConfigureAwait(false);

                    var resultado = await cmd.ExecuteScalarAsync().ConfigureAwait(false);

                    if (resultado != null)
                    {
                        retorno = Convert.ToBoolean(resultado);
                    }
                }
                catch (Exception ex)
                {
                    Logs objLog = new Logs()
                    {
                        metodo = MethodBase.GetCurrentMethod().Name,
                        classe = this.GetType().Name,
                        dados = parametro,
                        data = DateTime.Now,
                        mensagem = ex.Message,
                        exception = ex.InnerException == null ? "" : ex.InnerException.ToString()
                    };

                    objLog.Adiciona();

                    string name = DateTime.Now.ToBinary().ToString();

                    using (StreamWriter sw = new StreamWriter(@"C:\inetpub\wwwroot\Atendup\Arquivos\Backup\" + name + ".txt"))
                    {
                        string line = "";

                        line += parametro.proc + "#*#";
                        line += JsonConvert.SerializeObject(parametro.name) + "#*#";
                        line += JsonConvert.SerializeObject(parametro.valor) + "#*#";
                        line += JsonConvert.SerializeObject(parametro.tipo) + "#*#";

                        sw.WriteLine(line);
                    }
                }
            }
        }

        return retorno;
    }

어떻게해야합니까? 감사

Mcbowes

Web Api 호출이 비동기가 아닙니다. 다음으로 변경해보세요.

[HttpGet]
[Route("integracao/iniciar")]
public async Task<IHttpActionResult> FazerIntegrar()
{
    try
    {
        Integrar objIntegrar = new Integrar();

        return Ok(await objIntegrar.Integra());
    }
    catch (Exception ex)
    {
        return InternalServerError(ex);
    }

}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

루비 삼항 연산자가 예상대로 반환되지 않습니다.

분류에서Dev

비동기 메서드가 호출자에게 제어를 반환하지 않습니다.

분류에서Dev

AND 연산자가 C에서 예상대로 작동하지 않습니다.

분류에서Dev

루비 강제 메서드가 예상대로 호출되지 않았습니다.

분류에서Dev

C ++ 삭제가 Windows에서 예상대로 작동하지 않습니다.

분류에서Dev

예상대로 비동기가 작동하지 않습니다.

분류에서Dev

UnhandledException 처리기에서 호출 된 비동기 메서드가 대기하지 않습니다.

분류에서Dev

C ++ 스택 기반 생성자 / 소멸자가 예상대로 작동하지 않습니다.

분류에서Dev

Objective-C 추가 클래스 메서드가 예상대로 작동하지 않습니다.

분류에서Dev

.NET C #의 IdnMapping.GetAscii 메서드가 예상대로 작동하지 않습니다.

분류에서Dev

ng-repeat 사용자 지정 필터로 Typescript 메서드가 예상대로 작동하지 않습니다.

분류에서Dev

Java 일반 메서드가 예상대로 작동하지 않습니다.

분류에서Dev

C ++ setw ()가 예상대로 작동하지 않습니다.

분류에서Dev

Java 큐 add () / offer () 및 poll () 메서드가 예상대로 FIFO에 따라 작동하지 않습니다.

분류에서Dev

함수가 자동으로 호출되고 예상대로 작동하지 않습니다.

분류에서Dev

C의 표준 입력에서 줄을 읽는 기능이 예상대로 작동하지 않습니다.

분류에서Dev

c setvbuf () 함수 호출이 예상대로 작동하지 않습니다.

분류에서Dev

C의 빈 파일 읽기가 예상대로 작동하지 않습니다.

분류에서Dev

C #에서 제네릭 메서드 호출을 위조하면 FakeItEasy로 올바른 개체가 반환되지 않습니다.

분류에서Dev

Linux 커널 문자 드라이버 쓰기 호출이 예상대로 작동하지 않습니다.

분류에서Dev

: 선택자가 예상대로 작동하지 않습니다.

분류에서Dev

메서드에 대한 Swift 일반 제약 조건이 인스턴스에서 호출 될 때 예상대로 작동하지 않습니다.

분류에서Dev

PHP 문자열 비교가 예상대로 작동하지 않습니다.

분류에서Dev

문자열 비교가 예상대로 작동하지 않습니다.

분류에서Dev

상대 레이아웃이 가로보기에서 예상대로 제대로 표시되지 않습니다.

분류에서Dev

Python : 번호 매기기가 예상대로 작동하지 않습니다.

분류에서Dev

Formik의 resetForm 메서드가 예상대로 작동하지 않습니다.

분류에서Dev

Ruby downcase 메서드가 예상대로 작동하지 않습니다.

분류에서Dev

contains () 메서드가 예상대로 작동하지 않습니다.

Related 관련 기사

  1. 1

    루비 삼항 연산자가 예상대로 반환되지 않습니다.

  2. 2

    비동기 메서드가 호출자에게 제어를 반환하지 않습니다.

  3. 3

    AND 연산자가 C에서 예상대로 작동하지 않습니다.

  4. 4

    루비 강제 메서드가 예상대로 호출되지 않았습니다.

  5. 5

    C ++ 삭제가 Windows에서 예상대로 작동하지 않습니다.

  6. 6

    예상대로 비동기가 작동하지 않습니다.

  7. 7

    UnhandledException 처리기에서 호출 된 비동기 메서드가 대기하지 않습니다.

  8. 8

    C ++ 스택 기반 생성자 / 소멸자가 예상대로 작동하지 않습니다.

  9. 9

    Objective-C 추가 클래스 메서드가 예상대로 작동하지 않습니다.

  10. 10

    .NET C #의 IdnMapping.GetAscii 메서드가 예상대로 작동하지 않습니다.

  11. 11

    ng-repeat 사용자 지정 필터로 Typescript 메서드가 예상대로 작동하지 않습니다.

  12. 12

    Java 일반 메서드가 예상대로 작동하지 않습니다.

  13. 13

    C ++ setw ()가 예상대로 작동하지 않습니다.

  14. 14

    Java 큐 add () / offer () 및 poll () 메서드가 예상대로 FIFO에 따라 작동하지 않습니다.

  15. 15

    함수가 자동으로 호출되고 예상대로 작동하지 않습니다.

  16. 16

    C의 표준 입력에서 줄을 읽는 기능이 예상대로 작동하지 않습니다.

  17. 17

    c setvbuf () 함수 호출이 예상대로 작동하지 않습니다.

  18. 18

    C의 빈 파일 읽기가 예상대로 작동하지 않습니다.

  19. 19

    C #에서 제네릭 메서드 호출을 위조하면 FakeItEasy로 올바른 개체가 반환되지 않습니다.

  20. 20

    Linux 커널 문자 드라이버 쓰기 호출이 예상대로 작동하지 않습니다.

  21. 21

    : 선택자가 예상대로 작동하지 않습니다.

  22. 22

    메서드에 대한 Swift 일반 제약 조건이 인스턴스에서 호출 될 때 예상대로 작동하지 않습니다.

  23. 23

    PHP 문자열 비교가 예상대로 작동하지 않습니다.

  24. 24

    문자열 비교가 예상대로 작동하지 않습니다.

  25. 25

    상대 레이아웃이 가로보기에서 예상대로 제대로 표시되지 않습니다.

  26. 26

    Python : 번호 매기기가 예상대로 작동하지 않습니다.

  27. 27

    Formik의 resetForm 메서드가 예상대로 작동하지 않습니다.

  28. 28

    Ruby downcase 메서드가 예상대로 작동하지 않습니다.

  29. 29

    contains () 메서드가 예상대로 작동하지 않습니다.

뜨겁다태그

보관