C#(NET Async CTP)的关键词(lock
)不允许在
An await expression cannot be used in a synchronous function, in a query expression, in the catch or finally block of an exception handling statement, in the block of a lock statement, or in an unsafe context.
我认为,由于某种原因,汇编小组很难或不可能执行。
我试图用发言围绕以下方面开展工作:
class Async
{
public static async Task<IDisposable> Lock(object obj)
{
while (!Monitor.TryEnter(obj))
await TaskEx.Yield();
return new ExitDisposable(obj);
}
private class ExitDisposable : IDisposable
{
private readonly object obj;
public ExitDisposable(object obj) { this.obj = obj; }
public void Dispose() { Monitor.Exit(this.obj); }
}
}
// example usage
using (await Async.Lock(padlock))
{
await SomethingAsync();
}
然而,这并不如预期。 电话:Monitor.Exit
within ExitDisposable。 弃置的代码>似乎无限期地(大部分时间)阻挡了僵局,因为其他read人试图 acquire锁。 我怀疑我的工作不可靠,理由<编码>await
不允许在<条码><<<>>/代码>上作一些说明。
任何人都知道