{
    public class MyClass
    {
        // all the call to GetData() of apiHelper should pass through this method
        public async Task<T> InitiateAPICallAsync<T>(Task<T> apiCall) where T : BaseResponse
        {
            var response = await apiCall;
            // some common code work using response data
            return response;
        }
        public async void MyFunc()
        {
            var helper = new APIHelper("1", "2");
            //
            var response1 = await InitiateAPICallAsync(helper.GetData<Response1>()); // correct way
            var rewponse2 = await helper.GetData<Response1>(); // incorrect way, need to show warning
        }
    }
    public class APIHelper
    {
        public APIHelper(string a, string b)
        {
            // some code
        }
        public async Task<T> GetData<T>()
        {
            await Task.Delay(1000); // network call
            // other code
            return default;
        }
    }
    public class Response1 : BaseResponse { }
    public class Response2 : BaseResponse { }
    public class BaseResponse { }
}
in my application MyClass, there is a method named InitiateAPICallAsync(). All call to the GetData() method of APIHelper must be pass through this method. I need to showing warning, if GetAsync() method called directly without passing through InitiateAPICallAsync.
Note: It is a sample code snippet, where in my real time project the APIHelper represents a Connectivity library. and MyClass represents another library  named service.
 
    