1

기본 클래스에서 비동기는 아니지만 파생 클래스에서 비동기 인 가상 메서드를 정의하고 호출자가 대리자를 사용하여 호출합니다 (실제로는 단추로 활성화 된 ICommand입니다. 화면에서) 어떻게하면됩니까?메트로 C에서 가상 비동기 메서드 #

public class BaseClass 
{ 
    BIONESSBindingCommand mLogoffCommand; 

    public ICommand LogoffCommand 
    { 
     get 
     { 
      if (mLogoffCommand == null) 
      { 
       mLogoffCommand = new BIONESSBindingCommand(
        Param => Logoff(), //Command DoWork 
        Param => true); //Always can execute 
      } 

      return mLogoffCommand; 
     } 
    } 

    public virtual Task Logoff() 
    { 
     DoLogoff(); 
     return null; //??? 
    } 
} 

public class DerivedClass : BaseClass 
{ 
    public override async Task Logoff() 
    { 
     await SomeWoAsyncWork(); 
     base.Logoff(); //Has warninngs 
    } 
} 
+0

생성자 내부에서 속성과 메서드를 지정하는 경우를 제외하고는 제대로 작동하지 않습니까? –

답변

5

전화 Task.FromResult는 완료 Task를 얻을 수 있습니다. 또한 await 파생 된 클래스에서이 오류 전파가 가능합니다.

public class BaseClass 
{ 
    public virtual Task Logoff() 
    { 
    DoLogoff(); 
    return Task.FromResult(false); 
    } 
} 

public class DerivedClass : BaseClass 
{ 
    public override async Task Logoff() 
    { 
    await SomeWoAsyncWork(); 
    await base.Logoff(); 
    } 
} 
+0

서명이 작업 일 필요가 있습니다. 맞습니까? –

+0

아니요,'Task '는'Task'에서 파생됩니다. –

+0

맞아요. 문법적으로 작동하지만 Object를 반환하는 메서드와 같습니다. –