0

我想用网络服务创建一个队列。这是我的代码:

    public class Service1 : System.Web.Services.WebService
{


    Queue myQueue = new Queue();

    [WebMethod]
    public void push(int item)
    {
        if (myQueue == null)
            myQueue = new Queue();
        myQueue.Enqueue(item);
    }

    [WebMethod]
    public int pop()
    {
        if (myQueue != null)
        {
            if (myQueue.Count != 0)
            {
                return (int)myQueue.Dequeue();
            }

        }

            return -1;


    }
}

push() 方法工作正常,但是当我调用 pop() 检索数据时,它总是返回 -1
我的代码问题是什么?

4

2 回答 2

1

正如 I4V 所说,静态可以完成这项工作,但请确保防止同时呼叫者。无需在 push 中手动实例化 myQueue,因为声明保证实例可以使用。

public class Service1 : System.Web.Services.WebService
{
    static Queue myQueue = new Queue();

    [WebMethod]
    public void push(int item)
    {
        lock(myQueue)
        {
            myQueue.Enqueue(item);
        }
    }

    [WebMethod]
    public int pop()
    {
        lock(myQueue)
        {
            if (myQueue.Count != 0)
            {
                return (int)myQueue.Dequeue();
            }

            return -1;
        }
    }
}

此外,请考虑使用通用队列,这样您就不必继续投射。它更安全,更快捷。 http://msdn.microsoft.com/en-us/library/7977ey2c.aspx

// before class declaration
using System.Collections.Generic;

// replaces myQueue declaration
static Queue<int> myQueue = new Queue<int>();

// later, in pop - myQueue already returns ints, so no casting needed
return myQueue.Dequeue();
于 2013-03-16T21:15:08.330 回答
1

声明myQueuestatic。( static Queue myQueue = new Queue();) 因为似乎Service1每次调用都会创建一个新的实例。

于 2013-03-16T20:56:48.560 回答