Azure संग्रहण ग्राहक पुस्तकालय 2.1, मैं टेबल भंडारण async के एक प्रश्न बनाने पर काम कर रहा हूँ के साथ कार्य करना साथ Table.ExecuteQuerySegmentedAsync() का उपयोग कैसे करें।Azure तालिका भंडारण
public async Task<List<TAzureTableEntity>> GetByPartitionKey(string partitionKey)
{
var theQuery = _table.CreateQuery<TAzureTableEntity>()
.Where(tEnt => tEnt.PartitionKey == partitionKey);
TableQuerySegment<TAzureTableEntity> querySegment = null;
var returnList = new List<TAzureTableEntity>();
while(querySegment == null || querySegment.ContinuationToken != null)
{
querySegment = await theQuery.AsTableQuery()
.ExecuteSegmentedAsync(querySegment != null ?
querySegment.ContinuationToken : null);
returnList.AddRange(querySegment);
}
return returnList;
}
मान वापस आ रहा तो वहाँ तालिका भंडारण के लिए दौर यात्राएं का एक बहुत हो जाएगा डेटा के एक बड़े सेट है चलो: मैं इस कोड बनाया। समस्या मेरे पास है कि हम डेटा का एक सेट का इंतजार कर रहे हैं, एक में स्मृति सूची में जोड़कर, अधिक डेटा का इंतजार कर, एक ही सूची में जोड़कर, अभी तक अधिक डेटा का इंतजार कर, सूची में जोड़कर ... और इसलिए है आगे और आगे। क्यों न केवल एक नियमित tableQuery के आसपास एक कार्य। फैक्टरी। स्टार्टन्यू() लपेटें? इसलिए जैसा: इस तरह से
public async Task<List<TAzureTableEntity>> GetByPartitionKey(string partitionKey)
{
var returnList = await Task.Factory.StartNew(() =>
table.CreateQuery<TAzureTableEntity>()
.Where(ent => ent.PartitionKey == partitionKey)
.ToList());
return returnList;
}
कर रहा है कि हम SynchronizationContext आगे पीछे इतना उछल नहीं कर रहे हैं लगता है। या यह वास्तव में कोई फर्क पड़ता है?
संपादित प्रश्न
ऊपर उल्लेख किया दो स्थितियों में क्या अंतर है इस प्रकार संशोधित करने के लिए?
आप अपने आप async विधि में अपने "खंड" रख दिया और का उपयोग कर इसे कहते ConfigureAwait (गलत)। –
@PauloMorgado - विडंबना यह है कि वास्तव में मेरे पास TableQuerySegement है और जबकि पहले से ही एक अलग विधि में कथन है, लेकिन मुझे कार्य पर ConfigureAwait (false) विधि के बारे में पता नहीं था। पारितोषिक के लिए धन्यवाद! – Hallmanac
सभी लाइब्रेरी कोड के लिए ConfigureAwait (false) की अनुशंसा की जाती है और मैं इसे सभी गैर-यूआई एप्लिकेशन कोड में विस्तारित करूंगा। –