使用web服务实现队列
本文关键字:队列 实现 服务 web 使用 | 更新日期: 2023-09-27 18:04:21
我想创建一个web服务队列。这是我的代码:
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
我的代码有什么问题?
声明myQueue
为static
。(static Queue myQueue = new Queue();
),因为似乎Service1
的一个新的实例是创建与每个调用。
正如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();