Repository: tartiflette/tartiflette
Pull request #461 (2020-12-08 22:34:32)

Provides flexibility on fields execution (sequentially/concurrently)

sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.2%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.2% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)


abusi: Seems pretty cool to me @Maximilien-R 
Thanks again for your great work.
sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.2%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.2% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.2%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.2% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.2%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.2% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.2%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.2% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.2%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.2% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)


abusi: :heart: Looking very good
aljinovic: @abusi any ETA when this could be merged?
abusi: @Maximilien-R Is this ready or do you need more time ? @aljinovic seems to need it, so it may not be as "useless" as we thought. 
aljinovic: I have a case when a lot of fields are resolved from memory, so async coroutines cause unnecessary CPU load for these resolvers. I patched this a while ago as I thought it might be a specific use case and was happy when I saw this MR.
sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug.png' alt='Bug' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=BUG)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability.png' alt='Vulnerability' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=VULNERABILITY)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot.png' alt='Security Hotspot' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=SECURITY_HOTSPOT)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell.png' alt='Code Smell' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A.png' alt='A' width='16' height='16' />](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL) [3 Code Smells](https://sonarcloud.io/project/issues?id=tartiflette_tartiflette&pullRequest=461&resolved=false&types=CODE_SMELL)

[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0.png' alt='0.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_coverage&view=list)  
[<img src='https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3.png' alt='2.0%' width='16' height='16' />](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list) [2.0% Duplication](https://sonarcloud.io/component_measures?id=tartiflette_tartiflette&pullRequest=461&metric=new_duplicated_lines_density&view=list)



Patch:
diff --git a/tartiflette/__init__.py b/tartiflette/__init__.py
index c13cc01..ee22e83 100644
--- a/tartiflette/__init__.py
+++ b/tartiflette/__init__.py
@@ -34,6 +34,7 @@ async def create_engine(
     json_loader: Optional[Callable[[str], Dict[str, Any]]] = None,
     custom_default_arguments_coercer: Optional[Callable] = None,
     coerce_list_concurrently: Optional[bool] = None,
+    coerce_parent_concurrently: Optional[bool] = None,
 ) -> "Engine":
     """
     Create an engine by analyzing the SDL and connecting it with the imported
@@ -59,6 +60,8 @@ async def create_engine(
     :param custom_default_arguments_coercer: callable that will replace the
     :param coerce_list_concurrently: whether or not list will be coerced
     concurrently
+    :param coerce_parent_concurrently: whether or not field will be coerced
+    concurrently
     tartiflette `default_arguments_coercer
     :type sdl: Union[str, List[str]]
     :type schema_name: str
@@ -70,6 +73,7 @@ async def create_engine(
     :type json_loader: Optional[Callable[[str], Dict[str, Any]]]
     :type custom_default_arguments_coercer: Optional[Callable]
     :type coerce_list_concurrently: Optional[bool]
+    :type coerce_parent_concurrently: Optional[bool]
     :return: a Cooked Engine instance
     :rtype: Engine
 
@@ -82,6 +86,7 @@ async def create_engine(
     >>>   hello(name: String!): String!
     >>> }''')
     """
+    # pylint: disable=too-many-arguments
     e = Engine()
 
     await e.cook(
@@ -95,6 +100,7 @@ async def create_engine(
         json_loader=json_loader,
         custom_default_arguments_coercer=custom_default_arguments_coercer,
         coerce_list_concurrently=coerce_list_concurrently,
+        coerce_parent_concurrently=coerce_parent_concurrently,
     )
 
     return e
diff --git a/tartiflette/engine.py b/tartiflette/engine.py
index 3580eca..1110a06 100644
--- a/tartiflette/engine.py
+++ b/tartiflette/engine.py
@@ -154,6 +154,7 @@ class Engine:
         json_loader=None,
         custom_default_arguments_coercer=None,
         coerce_list_concurrently=None,
+        coerce_parent_concurrently=None,
     ) -> None:
         """
         Creates an uncooked Engine instance.
@@ -168,6 +169,7 @@ class Engine:
             custom_default_arguments_coercer
         )
         self._coerce_list_concurrently = coerce_list_concurrently
+        self._coerce_parent_concurrently = coerce_parent_concurrently
         self._modules = modules
         self._query_cache_decorator = (
             query_cache_decorator
@@ -195,6 +197,7 @@ class Engine:
         json_loader: Optional[Callable[[str], Dict[str, Any]]] = None,
         custom_default_arguments_coercer: Optional[Callable] = None,
         coerce_list_concurrently: Optional[bool] = None,
+        coerce_parent_concurrently: Optional[bool] = None,
         schema_name: Optional[str] = None,
     ) -> None:
         """
@@ -221,6 +224,8 @@ class Engine:
         tartiflette `default_arguments_coercer`
         :param coerce_list_concurrently: whether or not list will be coerced
         concurrently
+        :param coerce_parent_concurrently: whether or not field will be coerced
+        concurrently
         :param schema_name: name of the SDL
         :type sdl: Union[str, List[str]]
         :type error_coercer: Callable[[Exception, Dict[str, Any]], Dict[str, Any]]
@@ -231,6 +236,7 @@ class Engine:
         :type json_loader: Optional[Callable[[str], Dict[str, Any]]]
         :type custom_default_arguments_coercer: Optional[Callable]
         :type coerce_list_concurrently: Optional[bool]
+        :type coerce_parent_concurrently: Optional[bool]
         :type schema_name: Optional[str]
         """
         # pylint: disable=too-many-arguments,too-many-locals
@@ -308,6 +314,11 @@ class Engine:
                 if coerce_list_concurrently is not None
                 else self._coerce_list_concurrently
             ),
+            (
+                coerce_parent_concurrently
+                if coerce_parent_concurrently is not None
+                else self._coerce_parent_concurrently
+            ),
         )
         self._build_response = partial(
             build_response, error_coercer=self._error_coercer
diff --git a/tartiflette/execution/execute.py b/tartiflette/execution/execute.py
index 5a60852..b818818 100644
--- a/tartiflette/execution/execute.py
+++ b/tartiflette/execution/execute.py
@@ -132,20 +132,37 @@ async def execute_fields(
     :return: the computed fields value
     :rtype: Dict[str, Any]
     """
-    results = await asyncio.gather(
-        *[
-            resolve_field(
-                execution_context,
-                parent_type,
-                source_value,
-                field_nodes,
-                Path(path, entry_key),
-                is_introspection_context,
-            )
-            for entry_key, field_nodes in fields.items()
-        ],
-        return_exceptions=True,
-    )
+    results = []
+    to_await = {}
+    for index, (entry_key, field_nodes) in enumerate(fields.items()):
+        field_definition = get_field_definition(
+            execution_context.schema, parent_type, field_nodes[0].name.value
+        )
+        if field_definition is None:
+            results.append(UNDEFINED_VALUE)
+            continue
+
+        result = field_definition.resolver(
+            execution_context,
+            parent_type,
+            source_value,
+            field_nodes,
+            Path(path, entry_key),
+            is_introspection_context,
+        )
+
+        if field_definition.parent_concurrently:
+            to_await[index] = result
+            results.append(None)
+        else:
+            results.append(await result)
+
+    if to_await:
+        awaited = await asyncio.gather(
+            *list(to_await.values()), return_exceptions=True
+        )
+        for index, result in zip(to_await, awaited):
+            results[index] = result
 
     exceptions = extract_exceptions_from_results(results)
     if exceptions:
diff --git a/tartiflette/resolver/resolver.py b/tartiflette/resolver/resolver.py
index 20de2ca..38caa81 100644
--- a/tartiflette/resolver/resolver.py
+++ b/tartiflette/resolver/resolver.py
@@ -38,7 +38,8 @@ class Resolver:
         schema_name: str = "default",
         type_resolver: Optional[Callable] = None,
         arguments_coercer: Optional[Callable] = None,
-        concurrently: Optional[bool] = None,
+        list_concurrently: Optional[bool] = None,
+        parent_concurrently: Optional[bool] = True,
     ) -> None:
         """
         :param name: name of the field to wrap
@@ -46,19 +47,24 @@ class Resolver:
         :param type_resolver: callable to use to resolve the type of an
         abstract type
         :param arguments_coercer: the callable to use to coerce field arguments
-        :param concurrently: whether or not list will be coerced concurrently
+        :param list_concurrently: whether or not list will be coerced
+        concurrently
+        :param parent_concurrently: whether or not field will be coerced
+        concurrently
         :type name: str
         :type schema_name: str
         :type type_resolver: Optional[Callable]
         :type arguments_coercer: Optional[Callable]
-        :type concurrently: Optional[bool]
+        :type list_concurrently: Optional[bool]
+        :type parent_concurrently: Optional[bool]
         """
         self.name = name
         self._type_resolver = type_resolver
         self._implementation = None
         self._schema_name = schema_name
         self._arguments_coercer = arguments_coercer
-        self._concurrently = concurrently
+        self._list_concurrently = list_concurrently
+        self._parent_concurrently = parent_concurrently
 
     def bake(self, schema: "GraphQLSchema") -> None:
         """
@@ -75,7 +81,8 @@ class Resolver:
             field = schema.get_field_by_name(self.name)
             field.raw_resolver = self._implementation
             field.query_arguments_coercer = self._arguments_coercer
-            field.query_concurrently = self._concurrently
+            field.query_list_concurrently = self._list_concurrently
+            field.query_parent_concurrently = self._parent_concurrently
 
             field_wrapped_type = get_wrapped_type(
                 get_graphql_type(schema, field.gql_type)
diff --git a/tartiflette/schema/bakery.py b/tartiflette/schema/bakery.py
index 5be3357..c35ba30 100644
--- a/tartiflette/schema/bakery.py
+++ b/tartiflette/schema/bakery.py
@@ -34,6 +34,7 @@ class SchemaBakery:
         custom_default_type_resolver: Optional[Callable] = None,
         custom_default_arguments_coercer: Optional[Callable] = None,
         coerce_list_concurrently: Optional[bool] = None,
+        coerce_parent_concurrently: Optional[bool] = None,
     ) -> "GraphQLSchema":
         """
         Bakes and returns a GraphQLSchema instance.
@@ -47,11 +48,14 @@ class SchemaBakery:
         tartiflette `default_arguments_coercer`
         :param coerce_list_concurrently: whether or not list will be coerced
         concurrently
+        :param coerce_parent_concurrently: whether or not field will be coerced
+        concurrently
         :type schema_name: str
         :type custom_default_resolver: Optional[Callable]
         :type custom_default_type_resolver: Optional[Callable]
         :type custom_default_arguments_coercer: Optional[Callable]
         :type coerce_list_concurrently: Optional[bool]
+        :type coerce_parent_concurrently: Optional[bool]
         :return: a baked GraphQLSchema instance
         :rtype: GraphQLSchema
         """
@@ -61,5 +65,6 @@ class SchemaBakery:
             custom_default_type_resolver,
             custom_default_arguments_coercer,
             coerce_list_concurrently,
+            coerce_parent_concurrently,
         )
         return schema
diff --git a/tartiflette/schema/schema.py b/tartiflette/schema/schema.py
index a9d945a..aa8ce11 100644
--- a/tartiflette/schema/schema.py
+++ b/tartiflette/schema/schema.py
@@ -180,6 +180,7 @@ class GraphQLSchema:
         self.default_type_resolver: Optional[Callable] = None
         self.default_arguments_coercer: Optional[Callable] = None
         self.coerce_list_concurrently: Optional[bool] = None
+        self.coerce_parent_concurrently: Optional[bool] = None
 
         # Operation type names
         self.query_operation_name: str = _DEFAULT_QUERY_OPERATION_NAME
@@ -1118,6 +1119,7 @@ class GraphQLSchema:
         custom_default_type_resolver: Optional[Callable] = None,
         custom_default_arguments_coercer: Optional[Callable] = None,
         coerce_list_concurrently: Optional[bool] = None,
+        coerce_parent_concurrently: Optional[bool] = None,
     ) -> None:
         """
         Bake the final schema (it should not change after this) used for
@@ -1131,10 +1133,13 @@ class GraphQLSchema:
         tartiflette `default_arguments_coercer`
         :param coerce_list_concurrently: whether or not list will be coerced
         concurrently
+        :param coerce_parent_concurrently: whether or not field will be coerced
+        concurrently
         :type custom_default_resolver: Optional[Callable]
         :type custom_default_type_resolver: Optional[Callable]
         :type custom_default_arguments_coercer: Optional[Callable]
         :type coerce_list_concurrently: Optional[bool]
+        :type coerce_parent_concurrently: Optional[bool]
         """
         self.default_type_resolver = (
             custom_default_type_resolver or default_type_resolver
@@ -1147,6 +1152,11 @@ class GraphQLSchema:
             if coerce_list_concurrently is not None
             else True
         )
+        self.coerce_parent_concurrently = (
+            coerce_parent_concurrently
+            if coerce_parent_concurrently is not None
+            else True
+        )
         self._inject_introspection_fields()
 
         self._validate_extensions()  # Validate this before bake
diff --git a/tartiflette/subscription/subscription.py b/tartiflette/subscription/subscription.py
index 0227328..fd4fc8f 100644
--- a/tartiflette/subscription/subscription.py
+++ b/tartiflette/subscription/subscription.py
@@ -40,23 +40,29 @@ class Subscription:
         name: str,
         schema_name: str = "default",
         arguments_coercer: Optional[Callable] = None,
-        concurrently: Optional[bool] = None,
+        list_concurrently: Optional[bool] = None,
+        parent_concurrently: Optional[bool] = True,
     ) -> None:
         """
         :param name: name of the subscription field
         :param schema_name: name of the schema to which link the subscription
         :param arguments_coercer: callable to use to coerce field arguments
-        :param concurrently: whether list should be coerced concurrently
+        :param list_concurrently: whether or not list will be coerced
+        concurrently
+        :param parent_concurrently: whether or not field will be coerced
+        concurrently
         :type name: str
         :type schema_name: str
         :type arguments_coercer: Optional[Callable]
-        :type concurrently: Optional[bool]
+        :type list_concurrently: Optional[bool]
+        :type parent_concurrently: Optional[bool]
         """
         self.name = name
         self._implementation = None
         self._schema_name = schema_name
         self._arguments_coercer = arguments_coercer
-        self._concurrently = concurrently
+        self._list_concurrently = list_concurrently
+        self._parent_concurrently = parent_concurrently
 
     def bake(self, schema: "GraphQLSchema") -> None:
         """
@@ -85,7 +91,8 @@ class Subscription:
 
         field.subscribe = self._implementation
         field.subscription_arguments_coercer = self._arguments_coercer
-        field.subscription_concurrently = self._concurrently
+        field.subscription_list_concurrently = self._list_concurrently
+        field.subscription__parent_concurrently = self._parent_concurrently
 
     def __call__(self, implementation: Callable) -> Callable:
         """
diff --git a/tartiflette/types/field.py b/tartiflette/types/field.py
index 22c528a..a3ad6db 100644
--- a/tartiflette/types/field.py
+++ b/tartiflette/types/field.py
@@ -65,9 +65,12 @@ class GraphQLField:
         self.subscription_arguments_coercer: Optional[Callable] = None
 
         # Concurrently
-        self.concurrently: Optional[bool] = None
-        self.query_concurrently: Optional[bool] = None
-        self.subscription_concurrently: Optional[bool] = None
+        self.list_concurrently: Optional[bool] = None
+        self.parent_concurrently: Optional[bool] = None
+        self.query_list_concurrently: Optional[bool] = None
+        self.query_parent_concurrently: Optional[bool] = None
+        self.subscription_list_concurrently: Optional[bool] = None
+        self.subscription_parent_concurrently: Optional[bool] = None
 
         # Introspection attributes
         self.isDeprecated: bool = False  # pylint: disable=invalid-name
@@ -165,12 +168,19 @@ class GraphQLField:
         else:
             self.arguments_coercer = schema.default_arguments_coercer
 
-        if self.subscription_concurrently is not None:
-            self.concurrently = self.subscription_concurrently
-        elif self.query_concurrently is not None:
-            self.concurrently = self.query_concurrently
+        if self.subscription_list_concurrently is not None:
+            self.list_concurrently = self.subscription_list_concurrently
+        elif self.query_list_concurrently is not None:
+            self.list_concurrently = self.query_list_concurrently
         else:
-            self.concurrently = schema.coerce_list_concurrently
+            self.list_concurrently = schema.coerce_list_concurrently
+
+        if self.subscription_parent_concurrently is not None:
+            self.parent_concurrently = self.subscription_parent_concurrently
+        elif self.query_parent_concurrently is not None:
+            self.parent_concurrently = self.query_parent_concurrently
+        else:
+            self.parent_concurrently = schema.coerce_parent_concurrently
 
         # Directives
         directives_definition = compute_directive_nodes(
@@ -205,7 +215,7 @@ class GraphQLField:
                 with_default=True,
             ),
             output_coercer=get_output_coercer(
-                self.graphql_type, self.concurrently
+                self.graphql_type, self.list_concurrently
             ),
         )
 


Test patch:
diff --git a/tests/functional/regressions/issue278/test_issue457.py b/tests/functional/regressions/issue278/test_issue457.py
index a003389..933cacb 100644
--- a/tests/functional/regressions/issue278/test_issue457.py
+++ b/tests/functional/regressions/issue278/test_issue457.py
@@ -22,7 +22,7 @@ type Query {
 @pytest.mark.asyncio
 async def test_issue_457_sequentially(random_schema_name):
     @Resolver(
-        "Query.books", concurrently=False, schema_name=random_schema_name
+        "Query.books", list_concurrently=False, schema_name=random_schema_name
     )
     async def test_query_books(parent, args, ctx, info):
         return _BOOKS
@@ -44,7 +44,9 @@ async def test_issue_457_sequentially(random_schema_name):
 
 @pytest.mark.asyncio
 async def test_issue_457_concurrently(random_schema_name):
-    @Resolver("Query.books", concurrently=True, schema_name=random_schema_name)
+    @Resolver(
+        "Query.books", list_concurrently=True, schema_name=random_schema_name
+    )
     async def test_query_books(parent, args, ctx, info):
         return _BOOKS
 
diff --git a/tests/functional/regressions/test_parent_concurrently.py b/tests/functional/regressions/test_parent_concurrently.py
new file mode 100644
index 0000000..3066c1f
--- /dev/null
+++ b/tests/functional/regressions/test_parent_concurrently.py
@@ -0,0 +1,418 @@
+import asyncio
+import random
+
+import pytest
+
+from tartiflette import Resolver, create_engine
+from tartiflette.resolver.default import default_field_resolver
+
+_AUTHORS = [
+    {"id": i, "firstName": f"First #{i}", "lastName": f"Last #{i}"}
+    for i in range(1, 3)
+]
+_BOOKS = [
+    {
+        "id": i,
+        "title": f"Book #{i}",
+        "comments": [f"Comment #{i}" for j in range(1, 3)],
+        "rating": 4,
+        "author_ids": [1, 2],
+    }
+    for i in range(1, 3)
+]
+
+_SDL = """
+type Author {
+  id: Int!
+  firstName: String!
+  lastName: String!
+}
+
+type Book {
+  id: Int!
+  title: String!
+  comments: [String!]
+  rating: Int!
+  authors: [Author!]
+}
+
+type Query {
+  books: [Book!]
+}
+"""
+
+_QUERY = """
+{
+  books {
+    id
+    title
+    comments
+    rating
+    authors {
+      id
+      firstName
+      lastName
+    }
+  }
+}
+"""
+
+_EXPECTED = {
+    "data": {
+        "books": [
+            {
+                "id": 1,
+                "title": "Book #1",
+                "comments": ["Comment #1", "Comment #1"],
+                "rating": 4,
+                "authors": [
+                    {"id": 1, "firstName": "First #1", "lastName": "Last #1"},
+                    {"id": 2, "firstName": "First #2", "lastName": "Last #2"},
+                ],
+            },
+            {
+                "id": 2,
+                "title": "Book #2",
+                "comments": ["Comment #2", "Comment #2"],
+                "rating": 4,
+                "authors": [
+                    {"id": 1, "firstName": "First #1", "lastName": "Last #1"},
+                    {"id": 2, "firstName": "First #2", "lastName": "Last #2"},
+                ],
+            },
+        ]
+    }
+}
+
+
+@pytest.mark.asyncio
+async def test_issue_xxx_sequentially(random_schema_name):
+    parsed_fields = []
+
+    async def custom_default_field_resolver(parent, args, ctx, info):
+        parsed_fields.append(f"{info.parent_type}.{info.field_name}")
+        return await default_field_resolver(parent, args, ctx, info)
+
+    @Resolver(
+        "Query.books", list_concurrently=False, schema_name=random_schema_name
+    )
+    async def resolve_query_books(parent, args, ctx, info):
+        return _BOOKS
+
+    @Resolver(
+        "Book.authors", list_concurrently=False, schema_name=random_schema_name
+    )
+    async def resolve_book_authors(parent, args, ctx, info):
+        return [
+            author
+            for author in _AUTHORS
+            if author["id"] in parent["author_ids"]
+        ]
+
+    @Resolver(
+        "Book.id", parent_concurrently=False, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Book.title", parent_concurrently=False, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Book.comments",
+        parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Book.rating",
+        parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Author.id", parent_concurrently=False, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Author.firstName",
+        parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Author.lastName",
+        parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    async def resolve_default_with_random_sleep(parent, args, ctx, info):
+        await asyncio.sleep(random.randint(0, 10) / 100)
+        return await custom_default_field_resolver(parent, args, ctx, info)
+
+    engine = await create_engine(
+        _SDL,
+        custom_default_resolver=custom_default_field_resolver,
+        schema_name=random_schema_name,
+    )
+
+    assert await engine.execute(_QUERY) == _EXPECTED
+    assert parsed_fields == [
+        "Book.id",
+        "Book.title",
+        "Book.comments",
+        "Book.rating",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+        "Book.id",
+        "Book.title",
+        "Book.comments",
+        "Book.rating",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+    ]
+
+
+@pytest.mark.asyncio
+async def test_issue_xxx_concurrently(random_schema_name):
+    parsed_fields = []
+
+    async def custom_default_field_resolver(parent, args, ctx, info):
+        parsed_fields.append(f"{info.parent_type}.{info.field_name}")
+        return await default_field_resolver(parent, args, ctx, info)
+
+    @Resolver(
+        "Query.books", list_concurrently=False, schema_name=random_schema_name
+    )
+    async def resolve_query_books(parent, args, ctx, info):
+        return _BOOKS
+
+    @Resolver(
+        "Book.authors", list_concurrently=False, schema_name=random_schema_name
+    )
+    async def resolve_book_authors(parent, args, ctx, info):
+        return [
+            author
+            for author in _AUTHORS
+            if author["id"] in parent["author_ids"]
+        ]
+
+    @Resolver(
+        "Book.id", parent_concurrently=True, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Book.title", parent_concurrently=True, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Book.comments",
+        parent_concurrently=True,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Book.rating", parent_concurrently=True, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Author.id", parent_concurrently=True, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Author.firstName",
+        parent_concurrently=True,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Author.lastName",
+        parent_concurrently=True,
+        schema_name=random_schema_name,
+    )
+    async def resolve_default_with_random_sleep(parent, args, ctx, info):
+        await asyncio.sleep(random.randint(0, 10) / 100)
+        return await custom_default_field_resolver(parent, args, ctx, info)
+
+    engine = await create_engine(
+        _SDL,
+        custom_default_resolver=custom_default_field_resolver,
+        schema_name=random_schema_name,
+    )
+
+    assert await engine.execute(_QUERY) == _EXPECTED
+    assert parsed_fields != [
+        "Book.id",
+        "Book.title",
+        "Book.comments",
+        "Book.rating",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+        "Book.id",
+        "Book.title",
+        "Book.comments",
+        "Book.rating",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+        "Author.id",
+        "Author.firstName",
+        "Author.lastName",
+    ]
+
+
+@pytest.mark.asyncio
+async def test_issue_xxx_mixed(random_schema_name):
+    async def custom_default_field_resolver(
+        parent, args, ctx, info, parsed_fields
+    ):
+        parsed_fields.append(f"{info.parent_type}.{info.field_name}")
+        await asyncio.sleep(random.randint(0, 10) / 100)
+        return await default_field_resolver(parent, args, ctx, info)
+
+    @Resolver(
+        "Query.books",
+        list_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    async def resolve_query_books(parent, args, ctx, info):
+        return _BOOKS
+
+    @Resolver(
+        "Book.authors",
+        list_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    async def resolve_book_authors(parent, args, ctx, info):
+        return [
+            author
+            for author in _AUTHORS
+            if author["id"] in parent["author_ids"]
+        ]
+
+    parsed_book_fields = []
+
+    @Resolver(
+        "Book.id", parent_concurrently=False, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Book.title", parent_concurrently=True, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Book.comments",
+        parent_concurrently=True,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Book.rating",
+        parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    async def resolve_default_with_random_sleep(parent, args, ctx, info):
+        return await custom_default_field_resolver(
+            parent, args, ctx, info, parsed_book_fields
+        )
+
+    parsed_author_fields = []
+
+    @Resolver(
+        "Author.id", parent_concurrently=True, schema_name=random_schema_name
+    )
+    @Resolver(
+        "Author.firstName",
+        parent_concurrently=True,
+        schema_name=random_schema_name,
+    )
+    @Resolver(
+        "Author.lastName",
+        parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    async def resolve_default_with_random_sleep(parent, args, ctx, info):
+        return await custom_default_field_resolver(
+            parent, args, ctx, info, parsed_author_fields
+        )
+
+    engine = await create_engine(
+        _SDL,
+        custom_default_resolver=custom_default_field_resolver,
+        schema_name=random_schema_name,
+    )
+
+    assert await engine.execute(_QUERY) == _EXPECTED
+    assert len(parsed_book_fields) == 8
+    assert len(parsed_author_fields) == 12
+    assert parsed_book_fields[:2] == ["Book.id", "Book.rating"]
+    assert parsed_author_fields[:1] == ["Author.lastName"]
+
+
+@pytest.mark.asyncio
+async def test_issue_xxx_sequentially_schema_level(random_schema_name):
+    fields_parsing_order = []
+
+    async def custom_default_field_resolver(parent, args, ctx, info):
+        fields_parsing_order.append(f"{info.parent_type}.{info.field_name}")
+        return await default_field_resolver(parent, args, ctx, info)
+
+    engine = await create_engine(
+        _SDL,
+        custom_default_resolver=custom_default_field_resolver,
+        coerce_list_concurrently=False,
+        coerce_parent_concurrently=False,
+        schema_name=random_schema_name,
+    )
+    assert await engine.execute(
+        "{ books { id title } }", initial_value={"books": _BOOKS}
+    ) == {
+        "data": {
+            "books": [
+                {"id": book["id"], "title": book["title"]} for book in _BOOKS
+            ]
+        }
+    }
+    assert fields_parsing_order == [
+        "Query.books",
+        "Book.id",
+        "Book.title",
+        "Book.id",
+        "Book.title",
+    ]
+
+
+@pytest.mark.asyncio
+async def test_issue_xxx_concurrently_schema_level(random_schema_name):
+    fields_parsing_order = []
+
+    async def custom_default_field_resolver(parent, args, ctx, info):
+        await asyncio.sleep(random.randint(0, 10) / 100)
+        fields_parsing_order.append(f"{info.parent_type}.{info.field_name}")
+        return await default_field_resolver(parent, args, ctx, info)
+
+    engine = await create_engine(
+        _SDL,
+        custom_default_resolver=custom_default_field_resolver,
+        coerce_list_concurrently=False,
+        coerce_parent_concurrently=True,
+        schema_name=random_schema_name,
+    )
+    assert await engine.execute(
+        "{ books { id title rating } }", initial_value={"books": _BOOKS}
+    ) == {
+        "data": {
+            "books": [
+                {
+                    "id": book["id"],
+                    "title": book["title"],
+                    "rating": book["rating"],
+                }
+                for book in _BOOKS
+            ]
+        }
+    }
+    assert fields_parsing_order != [
+        "Query.books",
+        "Book.id",
+        "Book.title",
+        "Book.rating",
+        "Book.id",
+        "Book.title",
+        "Book.rating",
+    ]