Ես ունեմ ստորև բերված ծրագիրը, որը ֆայլերը կտեղափոխի մի գրացուցակից մյուսը: Սինխրոն եղանակով այն լավ է աշխատում: Բայց ես ուզում եմ դա անել ասինխրոն եղանակով:
Շնորհակալություն
Ես ունեմ ստորև բերված ծրագիրը, որը ֆայլերը կտեղափոխի մի գրացուցակից մյուսը: Սինխրոն եղանակով այն լավ է աշխատում: Բայց ես ուզում եմ դա անել ասինխրոն եղանակով:
Շնորհակալություն
Սխալն ամեն ինչ ասում է. դուք չեք կարող await
ինչ-որ բան, որը void
է: Դուք կարող եք միայն await
Task
ներ և այնպիսի բաներ, որոնք նման են Task
s-ին (օրինակ՝ YieldAwaitable
, որը վերադարձվել է Task.Yield()
): Բայց դուք, անշուշտ, չեք կարող await
void
:
Ֆայլը .Net 4.5-ում ասինխրոն կերպով տեղափոխելու միջոց կարծես թե չկա:
Լավագույնը, որ դուք կարող եք անել, կամ օգտագործելն է await Task.Run(() => fileinfo.MoveTo(target))
-ի նման մի բան, որը դեռևս կարգելափակի շարանը, բայց ոչ ընթացիկը (կարող է օգտակար լինել, եթե դուք UI շղթայում եք):
Կամ, որպես այլընտրանք, դուք կարող եք պատճենել ֆայլը ինքներդ՝ օգտագործելով Stream
s (որը կարող է լինել ասինքրոն), այնուհետև ջնջել բնօրինակը:
Դուք կարող եք օգտագործել սպասումը միայն այն դեպքում, երբ այն աջակցում է ձեր զանգահարած մեթոդին:
await
ին աջակցելու համար մեթոդը պետք է վերադարձնի Task<T>
Այս դեպքում fileInfo.MoveTo
-ը չի վերադարձնում Task
await
բաներ, որոնք Task
ներ չեն: Տես, օրինակ. Task.Yield()
, որը չի վերադարձնում Task
, բայց դեռ կարող է await
ed. 23.06.2012
Wait()
ին կամResult
ին՝ նախքանTask
-ի ավարտը): 23.06.2012