비동기 작업이 완료 될 때까지 타이머가 다시 시작되지 않도록 방지

케이시 크룩스턴

처음에는 " 비동기 메서드가 완료 될 때까지 기다리는 방법 "질문 일 뿐이라고 생각했습니다 . 하지만 그 이상이라고 생각합니다.

타이머가 설정되어 있습니다.

public void Start()
{
    _timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
    _timer.Interval = _context.adpSettings.SyncInterval * 1000;
    _timer.AutoReset = false;
    _timer.Enabled = true;
}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    var t = ExecuteTransactionReportAsync();
    _timer.Start(); 
}

private async Task ExecuteTransactionReportAsync()
{
    AccessEvent accessEvent = new AccessEvent();
    ....  do some logic
    await _context.GetConnector().EnqeueuEventAsync(accessEvent);
}

내가하려는 것은 끝날 timer_Elapsed()때까지 다시 불 을 피우지 않는 ExecuteTransactionReportAsync()것입니다. 그러나 ExecuteTransactionReportAsync()비동기 이기 때문에 프로세스가 계속 진행되고 timer_Elapsed()다시 시작됩니다.

실제로 ExecuteTransactionReportAsync()작업을 완료하는 10 초 이상 걸리지 않습니다 . (적어도 좋지 않거나 다른 문제가 있습니다.)하지만 디버깅 할 때는 고통 스럽습니다.

ExecuteTransactionReportAsync()비 동기화를 포함하지 않는 간단한 솔루션이 있습니까?

Fildor

TAP에 대한 나의 이해가 정확하다면 의도 한대로 작동 할 것입니다.

private async void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    await ExecuteTransactionReportAsync();
    _timer.Start(); 
}

또는 DavidG가 제안한 내용 :

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    _timer.Stop();
    ExecuteTransactionReportAsync().ContinueWith( () => {_timer.Start(); });
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Vuex : 작업이 완료 될 때까지 기다리는 방법?

분류에서Dev

작업이 완료 될 때까지 기다리는 방법

분류에서Dev

작업이 완료 될 때까지 기다린 다음 새 작업을 시작하십시오.

분류에서Dev

다른 작업이 완료 될 때까지 기다리지 않고보기를 업데이트하는 방법

분류에서Dev

다른 작업이 완료 될 때까지 기다리지 않고보기를 업데이트하는 방법

분류에서Dev

zsh는 작업이 완료 될 때까지 기다립니다.

분류에서Dev

cronjobs가 교체되도록 설정되면 Kubernetes는 새 작업을 시작하기 전에 이전 작업이 종료 될 때까지 기다 립니까?

분류에서Dev

asyncio-동적 목록의 각 작업이 완료되거나 취소 될 때까지 기다립니다.

분류에서Dev

Reactive Extensions Observerable.FromAsync : 비동기 작업이 완료 될 때까지 기다리는 방법

분류에서Dev

루프의 각 반복에서 비동기 작업이 완료 될 때까지 기다리는 방법

분류에서Dev

C #에서 비동기 작업이 완료 될 때까지 메인 스레드를 기다리는 방법

분류에서Dev

다른 작업이 완료 될 때까지 한 작업의 자동 반복 (TAP)

분류에서Dev

다른 작업이 완료 될 때까지 한 작업의 자동 반복 (TAP)

분류에서Dev

첫 번째 작업이 완료 될 때까지 기다리는 방법

분류에서Dev

종료하기 전에 동시 작업자가 완료 될 때까지 기다리십시오.

분류에서Dev

비동기 API 호출이 완료 될 때까지 다음 반복이 발생하지 않도록이 for 루프를 재구성하는 방법

분류에서Dev

모든 비동기 호출이 완료 될 때까지 기다리는 방법

분류에서Dev

Espresso는 ViewPager에서 스 와이프 작업이 완료 될 때까지 기다리지 않습니다.

분류에서Dev

배치의 모든 작업이 완료 될 때까지 새 작업 생성을 보류하도록 GNU 병렬에 지시하는 방법이 있습니까?

분류에서Dev

페이지가로드되기 전에 비동기 작업 (firebase) 호출이 완료 될 때까지 기다립니다.

분류에서Dev

Boost asio thread_pool 조인은 작업이 완료 될 때까지 기다리지 않습니다.

분류에서Dev

작업이 즉시 완료되지 않으면 @Published var에 바인딩 될 때 SwiftUI보기가 애니메이션되지 않음

분류에서Dev

Capybara / Poltergeist가 js 시작 탐색이 완료 될 때까지 기다리도록하는 방법은 무엇입니까?

분류에서Dev

팀 빌드가 중지되고 Gulp 작업이 완료 될 때까지 기다립니다.

분류에서Dev

CockroachDB 명령이 완료 될 때까지 기다리십시오.

분류에서Dev

문이 완료 될 때까지 기다리십시오.

분류에서Dev

gobalEval이 완료 될 때까지 기다리십시오.

분류에서Dev

c # : 완료되기 전에 특정 시간이 지난 후 비동기 작업 다시 시작

분류에서Dev

비동기 작업이 완료 될 때까지 대기하도록 Lambda 함수를 만드는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Vuex : 작업이 완료 될 때까지 기다리는 방법?

  2. 2

    작업이 완료 될 때까지 기다리는 방법

  3. 3

    작업이 완료 될 때까지 기다린 다음 새 작업을 시작하십시오.

  4. 4

    다른 작업이 완료 될 때까지 기다리지 않고보기를 업데이트하는 방법

  5. 5

    다른 작업이 완료 될 때까지 기다리지 않고보기를 업데이트하는 방법

  6. 6

    zsh는 작업이 완료 될 때까지 기다립니다.

  7. 7

    cronjobs가 교체되도록 설정되면 Kubernetes는 새 작업을 시작하기 전에 이전 작업이 종료 될 때까지 기다 립니까?

  8. 8

    asyncio-동적 목록의 각 작업이 완료되거나 취소 될 때까지 기다립니다.

  9. 9

    Reactive Extensions Observerable.FromAsync : 비동기 작업이 완료 될 때까지 기다리는 방법

  10. 10

    루프의 각 반복에서 비동기 작업이 완료 될 때까지 기다리는 방법

  11. 11

    C #에서 비동기 작업이 완료 될 때까지 메인 스레드를 기다리는 방법

  12. 12

    다른 작업이 완료 될 때까지 한 작업의 자동 반복 (TAP)

  13. 13

    다른 작업이 완료 될 때까지 한 작업의 자동 반복 (TAP)

  14. 14

    첫 번째 작업이 완료 될 때까지 기다리는 방법

  15. 15

    종료하기 전에 동시 작업자가 완료 될 때까지 기다리십시오.

  16. 16

    비동기 API 호출이 완료 될 때까지 다음 반복이 발생하지 않도록이 for 루프를 재구성하는 방법

  17. 17

    모든 비동기 호출이 완료 될 때까지 기다리는 방법

  18. 18

    Espresso는 ViewPager에서 스 와이프 작업이 완료 될 때까지 기다리지 않습니다.

  19. 19

    배치의 모든 작업이 완료 될 때까지 새 작업 생성을 보류하도록 GNU 병렬에 지시하는 방법이 있습니까?

  20. 20

    페이지가로드되기 전에 비동기 작업 (firebase) 호출이 완료 될 때까지 기다립니다.

  21. 21

    Boost asio thread_pool 조인은 작업이 완료 될 때까지 기다리지 않습니다.

  22. 22

    작업이 즉시 완료되지 않으면 @Published var에 바인딩 될 때 SwiftUI보기가 애니메이션되지 않음

  23. 23

    Capybara / Poltergeist가 js 시작 탐색이 완료 될 때까지 기다리도록하는 방법은 무엇입니까?

  24. 24

    팀 빌드가 중지되고 Gulp 작업이 완료 될 때까지 기다립니다.

  25. 25

    CockroachDB 명령이 완료 될 때까지 기다리십시오.

  26. 26

    문이 완료 될 때까지 기다리십시오.

  27. 27

    gobalEval이 완료 될 때까지 기다리십시오.

  28. 28

    c # : 완료되기 전에 특정 시간이 지난 후 비동기 작업 다시 시작

  29. 29

    비동기 작업이 완료 될 때까지 대기하도록 Lambda 함수를 만드는 방법은 무엇입니까?

뜨겁다태그

보관