작업 대기열을 통해 호출 될 때 메서드 이름 및 매개 변수 가져 오기

유럽 ​​사람

한 번에 하나의 작업을 실행할 수있는 간단한 작업 대기열이 있습니다.

 public class TaskQueue
{
    public SemaphoreSlim semaphore;
    public TaskQueue()
    {
        semaphore = new SemaphoreSlim(1);
    }

    public async Task<T> Enqueue<T>(Func<Task<T>> taskGenerator)
    {       
        await semaphore.WaitAsync();
        try
        {
            return await taskGenerator();
        }
        finally
        {
            semaphore.Release();
        }
    }

    public async Task Enqueue(Func<Task> taskGenerator)
    {
        await semaphore.WaitAsync();
        try
        {
            await taskGenerator();
        }
        finally
        {
            semaphore.Release();
        }
    }
}

그리고 다음과 같이 작업을 대기열에 넣습니다.

private async Task SaveData()
{
    //some code
    await taskQueue.Enqueue(async () => { printed = await pm.Print(Template); });
    //some code
}

이제 내가하고 싶은 것은 Enqueue메서드 내부 에 정보가 포함될 로그를 추가하는 것 $Print was called with parameter {Template}입니다. 실행 된 메소드의 이름과 매개 변수를 어떻게 얻을 수 있습니까?

[CallerMemberName] string caller = ""호출이 내부 SaveData에서 이루어 졌다는 정보를 얻을 수 있다는 것을 알고 있지만 원하는 정보를 기록 할 속성이나 무언가가 있습니까?

마크 그 라벨

이것은 가능하지만 (표현식 트리 등) 매우 비효율적입니다. 아마도 더 나은 방법은 객체를 대기열에 넣는 것입니다.

abstract class ThingToDo {
    public abstract Task DoTheThingAsync();
}

큐를 ThingToDo대신 큐로 만들면 Func<Task<T>>다음과 같은 것을 가질 수 있습니다.

sealed class PrintThing : ThingToDo {
    private readonly int x;
    private readonly string y;
    private readonly string caller;
    public PrintThing(int x, string y, [CallerMemberName] string caller = null) {
        this.x = x;
        this.y = y;
        this.caller = caller;
    }
    public override Task DoTheThingAsync() {...}
    public override ToString() => $"{nameof(PrintThing)}, x={x}, y={y} from {caller}";
}

이제 작업을 간단하게 출력 할 수 있습니다.

실제로,이 모든 컴파일러가 생성 될지에 그 차이가 없다 어쨌든 캡처 변수 람다 / 익명 방법에 대해.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JSON을 통해 전달 될 때 메소드에 대한 매개 변수 가져 오기

분류에서Dev

AOP 호출 클래스에서 메소드 이름 및 매개 변수 가져 오기

분류에서Dev

GET을 통해 매개 변수 가져 오기 및 POST (PHP)를 통해 제출

분류에서Dev

엔드 포인트에서 컨트롤러 및 작업 이름과 함께 매개 변수 가져 오기

분류에서Dev

작업 이름 및 빌드 ID로 Jenkins 빌드의 매개 변수 가져 오기

분류에서Dev

매개 변수의 호출 변수 이름 가져 오기

분류에서Dev

Sidekiq-특정 대기열을 실행하는 작업 가져 오기 (메서드 호출을 통해)

분류에서Dev

템플릿 기본 매개 변수로 사용될 때 완전히 특수화 된 오버로드 된 메서드가 호출되지 않습니다.

분류에서Dev

매개 변수 가져 오기 및 Javascript에서 배열 이름으로 사용

분류에서Dev

코드 파이프 라인 출력 '***'를 통해 매개 변수 저장소에서 값 가져 오기

분류에서Dev

템플릿 매개 변수가 추가 될 때 과부하 해결이 모호한 호출을 생성 함

분류에서Dev

메서드가 호출 될 때 정수 업데이트?

분류에서Dev

쉘을 통해 .Net에서 매개 변수 가져 오기

분류에서Dev

정확한 인수 및 매개 변수 유형 일치를 요구하지 않는 인수의 형태에 대해 호출 될 자바 클래스에서 가져 오기 생성자,

분류에서Dev

기본 함수가 실행될 때 typescript 데코레이터 메서드 호출

분류에서Dev

ssrs에서 매개 변수로 열 이름 가져 오기

분류에서Dev

메서드가 다른 클래스 (javascript)에서 호출 될 때 메서드 개체에 대한 참조 가져 오기

분류에서Dev

UWP 앱 웹보기는 탐색이 시작될 때마다 URL을 가져오고 매개 변수를 추가합니다.

분류에서Dev

메서드가 호출 될 때마다 C # 정적 메서드의 변수가 초기화됩니까?

분류에서Dev

beginInvoke로 호출되는 비동기 메서드에서 매개 변수 값 가져 오기

분류에서Dev

ConcourseCI : 리소스 가져 오기의 매핑 / 이름이 변경된 출력에서 작업 실행

분류에서Dev

String 객체에서 매개 변수 메소드가 호출 될 때 Ruby가 [[: rest]]를 출력하는 이유는 무엇입니까?

분류에서Dev

한 프로 시저를 다른 프로 시저에서 호출 할 때 : 오류 : 프로 시저 매개 변수 "..."가 출력 매개 변수이지만 해당 인수가 쓰기 가능하지 않습니다.

분류에서Dev

매개 변수를 사용하여 다양한 메서드 호출을 대기열에 추가

분류에서Dev

개인 방법으로 문제가 발생 될 때 인터페이스에서 기본 메소드를 호출

분류에서Dev

메서드 내에서 가져 오기 및 호출 기능이 작동하지 않음

분류에서Dev

Typescript의 매개 변수를 사용하여 메서드 이름이라는 자식 클래스 가져 오기

분류에서Dev

단일 매개 변수로 호출 할 때 선택적 매개 변수가있는 메서드 대리자가 작동하지 않음

분류에서Dev

Symfony : URL 문자열에서 매개 변수 이름 가져 오기

Related 관련 기사

  1. 1

    JSON을 통해 전달 될 때 메소드에 대한 매개 변수 가져 오기

  2. 2

    AOP 호출 클래스에서 메소드 이름 및 매개 변수 가져 오기

  3. 3

    GET을 통해 매개 변수 가져 오기 및 POST (PHP)를 통해 제출

  4. 4

    엔드 포인트에서 컨트롤러 및 작업 이름과 함께 매개 변수 가져 오기

  5. 5

    작업 이름 및 빌드 ID로 Jenkins 빌드의 매개 변수 가져 오기

  6. 6

    매개 변수의 호출 변수 이름 가져 오기

  7. 7

    Sidekiq-특정 대기열을 실행하는 작업 가져 오기 (메서드 호출을 통해)

  8. 8

    템플릿 기본 매개 변수로 사용될 때 완전히 특수화 된 오버로드 된 메서드가 호출되지 않습니다.

  9. 9

    매개 변수 가져 오기 및 Javascript에서 배열 이름으로 사용

  10. 10

    코드 파이프 라인 출력 '***'를 통해 매개 변수 저장소에서 값 가져 오기

  11. 11

    템플릿 매개 변수가 추가 될 때 과부하 해결이 모호한 호출을 생성 함

  12. 12

    메서드가 호출 될 때 정수 업데이트?

  13. 13

    쉘을 통해 .Net에서 매개 변수 가져 오기

  14. 14

    정확한 인수 및 매개 변수 유형 일치를 요구하지 않는 인수의 형태에 대해 호출 될 자바 클래스에서 가져 오기 생성자,

  15. 15

    기본 함수가 실행될 때 typescript 데코레이터 메서드 호출

  16. 16

    ssrs에서 매개 변수로 열 이름 가져 오기

  17. 17

    메서드가 다른 클래스 (javascript)에서 호출 될 때 메서드 개체에 대한 참조 가져 오기

  18. 18

    UWP 앱 웹보기는 탐색이 시작될 때마다 URL을 가져오고 매개 변수를 추가합니다.

  19. 19

    메서드가 호출 될 때마다 C # 정적 메서드의 변수가 초기화됩니까?

  20. 20

    beginInvoke로 호출되는 비동기 메서드에서 매개 변수 값 가져 오기

  21. 21

    ConcourseCI : 리소스 가져 오기의 매핑 / 이름이 변경된 출력에서 작업 실행

  22. 22

    String 객체에서 매개 변수 메소드가 호출 될 때 Ruby가 [[: rest]]를 출력하는 이유는 무엇입니까?

  23. 23

    한 프로 시저를 다른 프로 시저에서 호출 할 때 : 오류 : 프로 시저 매개 변수 "..."가 출력 매개 변수이지만 해당 인수가 쓰기 가능하지 않습니다.

  24. 24

    매개 변수를 사용하여 다양한 메서드 호출을 대기열에 추가

  25. 25

    개인 방법으로 문제가 발생 될 때 인터페이스에서 기본 메소드를 호출

  26. 26

    메서드 내에서 가져 오기 및 호출 기능이 작동하지 않음

  27. 27

    Typescript의 매개 변수를 사용하여 메서드 이름이라는 자식 클래스 가져 오기

  28. 28

    단일 매개 변수로 호출 할 때 선택적 매개 변수가있는 메서드 대리자가 작동하지 않음

  29. 29

    Symfony : URL 문자열에서 매개 변수 이름 가져 오기

뜨겁다태그

보관