仅在值可用时返回该值,否则等待该值...c#

本文关键字:等待 返回 | 更新日期: 2023-09-27 18:28:38

只有在值可用时才返回该值。如果我使用一个条件来检查null条件,它将抛出一个异常。"表示并非所有代码路径都返回值"

 internal PinMessage()
        {
            obj.PinsAvailable.ObserveOn(SynchronizationContext.Current).Subscribe(HandlePinsAvailable);
        }
    private void HandlePinsAvailable(byte[] pinBytes)
    {
        pinmesssage = Encoding.ASCII.GetString(pinBytes);
    }
    internal string GetPinMessage(string AccoutNumber)
    {
        string pinstring = string.Empty;
        obj.SendPinRequest(AccoutNumber);
        pinstring = pinmesssage;
        return pinstring;
    }
    private string _pinMessage;
    public string pinmesssage
    {
        get//Not all Code paths return a value
        {
            if (_pinMessage != null)
            return _pinMessage;
        }
        set { _pinMessage = value; }
    }

仅在值可用时返回该值,否则等待该值...c#

您得到这个编译错误是因为在_pinMesSafe为null的情况下没有返回任何内容。您需要从Access返回一些内容,或者在这种情况下返回,或者抛出异常。

   private string _pinMessafe;
     public string pinmesssage
     {
         get {
             if (_pinMessafe != null)
                 return _pinMessafe;
                                }
         set { _pinMessafe = value; }
     }

当它被调用时,你必须返回一些东西,你不能只是把一个方法调用挂起。你可以做的是自己强制检查:

   private string _pinMessafe;
     public string pinmesssage
     {
         get {
             return _pinMessafe ?? GetMessage()
         }
         set { _pinMessafe = value; }
     }

在这种情况下,GetMessage()必须负责返回消息。根据你提供的信息,很难给出更详细的答案。你应该编辑你的代码,使其更可读(包括英语拼写错误),并在需要时添加信息。

这不是"最佳"做法,但会起作用,让消费者等到生产者写入变量。

private string _pinMessafe;
object locker = new object();
public string pinmesssage
{
    get
    {
        string x = null;
        while(x == null) {
          lock(locker) { x = _pinMessafe ; }
          Thread.Sleep(1);
        }
        return x;
    }
    set { lock(locker) { _pinMessafe = value; } }
}