昨天我们的队友创建了代码,他将query.destroy()移到了单独的线程中。他这样做是为了让代码更快。
private queryBag : IQueryBag
... ... ...
private function destroyQueryBag() : Void
{
CoreThread.transferToCoreThread(function()
{
if (queryBag != null)
{
queryBag.destroy();
queryBag = null;
}
});
}
private function resetRequestsAndResponses() : Void
{
destroyQueryBag();
queryBag = null;
queryBag = createNewQueryBag();
}
但我发现这个代码给Ricky。如果新线程在创建NewQueryBag后太晚调用它们的代码怎么办?在这种情况下,queryBag仍然为null。我认为新线程应该使用另一个引用,正确的代码应该像下一个:
private var queryBag : IQueryBag
... ... ...
private function destroyQueryBag() : Void
{
private var tempQueryBag = queryBag; // another reference !!!
queryBag = null;
CoreThread.transferToCoreThread(function()
{
if (tempQueryBag != null)
{
tempQueryBag.destroy();
tempQueryBag = null;
}
});
}
private function resetRequestsAndResponses() : Void
{
destroyQueryBag();
queryBag = createNewQueryBag();
}
我在多线程方面经验不足。请问确认我的假设吗?